Commit Graph

156 Commits

Author SHA1 Message Date
Boris Zbarsky
152cd3ba6e Bug 1447098 part 1. Rename FromContent on various DOM classes to FromNode. r=mystor
MozReview-Commit-ID: 202nkbmkwfR
2018-03-21 17:39:04 -04:00
Boris Zbarsky
72b3558850 Bug 1446711 part 7. Switch the nsIDOMMouseEvent::MOZ_SOURCE_* constants over to MouseEventBinding. r=qdot
We can't include MouseEventBinding.h in MouseEvents.h because that produces
this include loop:

MouseEventBinding.h -> UIEventBinding.h ->
nsGlobalWindow.h -> nsGlobalWindowInner.h -> nsRefreshDriver.h ->
AnimationEventDispatcher.h -> AnimationComparator.h -> Animation.h ->
EffectCompositor.h -> PseudoElementHashEntry.h -> Element.h ->
PointerEventHandler.h -> MouseEvents.h -> MouseEventBinding.h

MozReview-Commit-ID: 6FNksGil7uD
2018-03-20 00:16:06 -04:00
Emilio Cobos Álvarez
8a71d3197b Bug 1423990: Move the last few attribute-related methods outside of nsIContent. r=bz
MozReview-Commit-ID: 8JZuS6O8f8W
2017-12-25 17:50:10 +01:00
Emilio Cobos Álvarez
ecd202d763 Backout changeset e43f568b3e9a (bug 1423990) because some OSX-only code still doesn't build. r=me 2017-12-25 12:55:45 +01:00
Emilio Cobos Álvarez
b3956b6171 Bug 1423990: Move the last few attribute-related methods outside of nsIContent. r=bz
MozReview-Commit-ID: 8JZuS6O8f8W
2017-12-07 19:13:50 +01:00
James Willcox
bc305b2903 Bug 1409113 - Add nsIPresShell::HasHandledUserInput() status to InputContext r=masayuki
MozReview-Commit-ID: 60x35NKEzhA
2017-11-22 10:09:06 -06:00
Masayuki Nakano
6075c1a47c Bug 1406446 - part 1: InputContextAction should treat focus change during handling a user input as caused by user input even if it's caused by JS r=smaug
Currently, widget doesn't show VKB when input context change is caused by JS.
However, if it's caused by an event handler of a user input, user may expect
to open VKB.  For example, if a touch event in fake editor causes moving
focus to actual editable node, user expect to show VKB.

Therefore, InputContextAction should declare two causes.  One is unknown but
occurred during handling non-keyboard event.  The other is unknown but occurred
during handling keyboard event.

However, EventStateManager doesn't have an API to check if it's being handling
a keyboard event.  Therefore, this patch adds it first.
AutoHandlingUserInputStatePusher sends event type to StartHandlingUserInput()
and StopHandlingUserInput() of EventStateManager and sUserKeyboardEventDepth
manages the number of nested keyboard event handling.  Therefore,
EventStateManager::IsHandlingKeyboardInput() can return if it's handling a
keyboard event.

IMEStateManager uses this new API to adjust the cause of changes of input
context.

Finally, InputContextAction::IsUserInput() is renamed to IsHandlingUserInput()
for consistency with EventStateManager and starts to return true when the
input context change is caused by script while it's handling a user input.

MozReview-Commit-ID: 5JsLqdqeGah
2017-10-24 02:46:15 +09:00
Wes Kocher
d0a80948dd Merge inbound to central, a=merge
MozReview-Commit-ID: IUFdbLdYFhX
2017-10-04 16:37:59 -07:00
Masayuki Nakano
e07461dbcb Bug 1404206 - Part 1: Smart Location Bar should have special inputmode value, mozAwesomebar. r=smaug, r=gijs
Smart Location Bar (a.k.a URL bar) has some features, loading inputted URL
directly, searching bookmark items and history items, and search inputted words
with registered search engine.

So, it does not make sense its inputmode is "url".  E.g., neither showing URL
specific software keyboard nor switching IME open state automatically for
typing URL may not be expected in most cases.

Unfortunately, there is no proper inputmode value for Smart Location Bar.
Therefore, this patch uses "mozAwesomebar" value and accepts the value only in
chrome documents.  This value should be handled by each native IME handler
properly.

MozReview-Commit-ID: 7vUnbpg91F2
2017-09-29 14:44:06 +09:00
Jan Henning
f41862a439 Bug 1398374 - Part 2 - Send an IME actionHint other than "next" for the last input element of a form. r=masayuki
Some pages might use neither a default submit element nor rely on implicit submission and instead implement their form handling with JS key event listeners.

On Android, most IMEs won't allow sending an "Enter" key press if we're using an actionHint of "next" as our default, so we now use "go"/"search" for the last single line text/number input that is not disabled.

MozReview-Commit-ID: ACC15OYtcTF
2017-09-30 21:38:04 +02:00
Masayuki Nakano
b02707058e Bug 1403026 - Make IMEStateManager release all string buffer of its static members at XPCOM shutdown r=smaug
IMEStateManager has a static instance of InputContext which has some nsString
instances.  Then, their members will be released after XPCOM shutdown and
that is detected as unexpected destruction.

Therefore, IMEStateManager should release them by itself at XPCOM shutdown.
Using nsTSubstring::SetCapacity(0) is the simplest way to release only the
string buffers.

MozReview-Commit-ID: LMrQxQF9xPn
2017-09-28 17:31:29 +09:00
Masayuki Nakano
b328e6619d Bug 1396725 - IMEStateManager doesn't need to manage whether menu keyboard listener is installed in different process r=smaug
Currently, IMEStateManager::OnChangeFocusInternal() tries to sync the state
whether menu keyboard listener is installed between itself and active remote
process -- When menu keyboard listener is installed, it posts a message to
_only_ active remote process.  When menu keyboard listener is uninstalled,
it posts a message to _only_ active remote process.  So, it's not guaranteed
that active remote process at installing and uninstalling may be different.
If it's different, IMEStateManager in the old remote process believes that
menu keyboard listener is still installed.  This is what the cause of IME
unavailable in a remote process.

Current approach must be wrong.  IMEStateManager should manage menu keyboard
listener state only in the process which the listener is installed in.  Then,
when menu keyboard listener is uninstalled, IMEStateManager needs to restore
the latest input context in the remote process without asking the remote
process.

Therefore, this patch does:

* stops IMEStateManager::OnChangeFocusInternal() posting message when menu
  keyboard listener is installed and uninstalled.
* removes the message sender and receiver from PBrowser.
* cache the latest input context of active remote process in
  IMEStateManager::SetInputContextForChildProcess().
* make IMEStateManager::SetInputContextForChildProcess() not set input context
  when menu keyboard listener is installed in the process.
* tries to restore latest input context in the remote process in
  IMEStateManager::OnChangeFocusInternal().  If there is no cached input
  context, it does nothing and waits next SetInputContextForChildProcess() call.
* clears the cache when IMEStateManager::OnChangeFocusInternal() changes
  active remote process to different one or nullptr.

So, this must improve performance at activating and inactivating memubar and
opening and closing popup menu in the main process.

MozReview-Commit-ID: EelKSPlaXdw
2017-09-07 11:46:08 +09:00
Masayuki Nakano
7d9f8ac673 Bug 1396302 - IMEStateManager::OnChangeFocusInternal() should check oldWidget's IME notification requests rather than sFocusedIMEWidget r=m_kato
In some cases, sFocusedIMEWidget may be nullptr but oldWidget still has
composition since IMEStateManager doesn't guarantee that NOTIFY_IME_OF_BLUR
is sent after REQUEST_TO_COMMIT_COMPOSITION nor REQUEST_TO_CANCEL_COMPOSITION.

Therefore, when it tries to clean up old widget's composition, it should refer
the old widget's IME notification requests.

MozReview-Commit-ID: 8kZvJbHfs5z
2017-09-04 17:37:40 +09:00
Masayuki Nakano
aad2d61048 Bug 1388647 - part1: IMEStateManager::OnChangeFocusInternal() shouldn't request to commit composition with sFocusedIMETabParent r=m_kato
When a remote process has focus and it loses focus,
IMEStateManager::OnChangeFocusInternal() sends NOTIFY_IME_OF_BLUR via
IMEStateManager::NotifyIMEOfBlurForChildProcess().  Therefore,
sFocusedIMETabParent and sFocusedIMEWidget are set to nullptr here. So, if a
window becomes active, REQUEST_IME_TO_COMMIT_COMPOSITION in
IMEStateManager::OnChangeFocusInternal() won't work because
IMEStateManager::NotifyIME() ignores the request because of coming from wrong
process.

Therefore, IMEStateManager::OnChangeFocusInternal() needs to send
REQUEST_TO_COMMIT_COMPOSITION with proper process information which is only
stored by TextComposition instance.

MozReview-Commit-ID: KNEvOoQtK1E
2017-08-09 18:04:28 +09:00
Jan Henning
2978bc8e64 Bug 1266683 - Part 2 - Add private browsing mode info to InputContext. r=masayuki
Android now supports telling an IME that it shouldn't store user-entered content into it's dictionary/language model/etc. and we want to automatically enable this in private browsing.

As the code that handles input on Android doesn't have any notion of tabs (and therefore of the difference between normal and private tabs), the best way to get that info across is to retrieve it directly within the IMEStateManager from the corresponding document and store it in the inputContext, which is then passed to Java for Fennec to handle.
Implementing this within Gecko also has the benefit that this part of the code can be used by other platforms as well should they want to support similar features in the future.

MozReview-Commit-ID: DsxjC4Ma7DR
2017-07-30 19:45:03 +02:00
Jim Mathies
95eb7583b7 Bug 1360666 - Update IME state when nsObjectLoadingContent content changes type from 'loading' to a valid content type. r=masayuki
MozReview-Commit-ID: JC3YGS75gpN
2017-08-03 14:07:14 -05:00
Olli Pettay
9b27cb1d6b Bug 1385666, ensure layout is flushed when editor gets focus, r=masayuki 2017-08-03 19:36:58 +03:00
Wes Kocher
5b3f4b0bd1 Backed out changeset bcd223309de8 (bug 1360666) for asserting in stylo reftests a=backout
MozReview-Commit-ID: HH3rwDwvYyz
2017-08-02 18:14:56 -07:00
Jim Mathies
ec5d051b3c Bug 1360666 - Update IME state when nsObjectLoadingContent content changes type from 'loading' to a valid content type. r=masayuki
MozReview-Commit-ID: 2cjJ5SvJsTa
2017-08-02 15:31:55 -05:00
Masayuki Nakano
95955e65f6 Bug 1384027 - part3: Don't send blur notification to IME from IMEStateManager::OnChangeFocusInternal() if no window becomes active and IME wants to keep composition during deactive r=m_kato
Currently, IMEStateManager::OnChangeFocusInternal() sends blur notification to IME when a remote process has IME focus and focus is moving from the process.  However, if IME wants to keep composition even during deactive and nobody will gets focus (i.e., all windows becomes deactive), IMEStateManager shouldn't send the blur notification because it causes committing composition.

Therefore, it should send blur notification only when focus is moving to a PresContext (that means that not all windows becomes deactive) or IME doesn't want to keep composition during deactive.

Then, even if another window becomes active next time, IMEStateManager can send "stop IME state management" message to the composing remote process and the remote process can commit composition normally.

Additionally, this patch ensures to send blur notification when IME focused TabParent or widget is being destroyed.  This fixes new memory leak bug of this patch (sFocusedIMETabParent keeps grabbing the instance until shutting down in some mochitests).

MozReview-Commit-ID: KYiFGo970a8
2017-07-26 00:57:29 +09:00
Kartikaya Gupta
14424677af Bug 1384233 - Remove SizePrintfMacros.h. r=froydnj
We have a minimum requirement of VS 2015 for Windows builds, which supports
the z length modifier for format specifiers. So we don't need SizePrintfMacros.h
any more, and can just use %zu and friends directly everywhere.

MozReview-Commit-ID: 6s78RvPFMzv
2017-07-26 16:03:57 -04:00
Masayuki Nakano
7ce85fbad9 Bug 1381732 - IMEStateManager::OnChangeFocusInternal() shouldn't set IME state when focus is not being changed, input context of the widget was already set by a remote process and our process is being activated r=m_kato
This patch fixes a simple mistake which was written when we support IME in e10s mode.

IMEStateManager::OnChangeFocusInternal() already has code which makes the method doesn't set IME state again when focus is not being changed, input context of the widget was already set by a remote process and our process is being activated.  However, the condition of checking if input context of the widget was set by which process is reversed.

MozReview-Commit-ID: 61ZH0VnKqPq
2017-07-25 16:34:07 +09:00
Masayuki Nakano
18bf94f506 Bug 1377672 - part5: IMEStateManager::OnChangeFocusInternal() should notify IME of blur when focus is moving from a remote process to another process r=m_kato
When focus is moving from a remote process to different process (including to the main process), destroying IMEContentObserver in the focused remote process occurs later.  I.e., NOTIFY_IME_OF_BLUR will be notified later.  However, it may be too late for new focused process especially when destroying the focused widget.

Therefore, this patch makes IMEStateManager notifies IME of blur in such case.

MozReview-Commit-ID: GkypubVjn3H
2017-07-05 16:26:41 +09:00
Masayuki Nakano
bb77d5ed5a Bug 1377672 - part3: IMEStateManager::NotifyIME() should ignore notifications and requests which comes from unexpected process r=m_kato,smaug
IME should receive notifications and requests only from proper process.  E.g., IME shouldn't commit composition by a request which came from previous focused process.

This patch makes that IMEStateManager::NotifyIME() takes pointer to TabParent optionally.  If the request or notification came from remote process, it should be non-nullptr.  Then, this makes it ignore notifications and requests from unexpected process.

Note that this patch also touches some gfx headers because they use |ipc::| but compiler is confused at the ambiguousness between |mozilla::ipc::| and |mozilla::dom::ipc::|.

Finally, this patch changes the NS_ASSERTION in IMEHandler::OnDestroyWindow() to MOZ_ASSERT because the orange caused by the NS_ASSERTION was not realized since there was already an intermittent orange bug caused by different NS_ASSERTION.

MozReview-Commit-ID: 9CgKXQRJWmN
2017-07-06 00:47:40 +09:00
Masayuki Nakano
f4c598c06d Bug 1377672 - part2: IMEStateManager::SetIMEState() should set input context with proper origin information r=m_kato
Currently, IMEStateManager always sets input context as set by current process even when it needs to adjust IME state when a tab parent for current focused IME process is removed.  Then, input context for the widget is marked as for main process but the widget still have IME focus of a remote process.

For fixing this mismatch, IMEStateManager should set ORIGIN_CONTENT even when the tab parent is being destroyed.

MozReview-Commit-ID: C10YOAtkET4
2017-07-03 12:28:10 +09:00
Masayuki Nakano
70617d4ac9 Bug 1377672 - part1: IMEStateManager in the main process should destroy active IME content observer when a tab parent takes focus r=m_kato
When focus is moved from the main process to a remote process and there is active IME content observer (i.e., an editor in the main process has focus), IMEStateManager should destroy the active IME content observer because it may cause notifying NOTIFY_IME_OF_BLUR when the main process takes focus again.

MozReview-Commit-ID: BG3eZhxoWBW
2017-07-02 22:00:18 +09:00
Sylvestre Ledru
9d4a84d778 Bug 1378712 - Remove all trailing whitespaces r=Ehsan
MozReview-Commit-ID: Kdz2xtTF9EG
2017-07-06 14:00:35 +02:00
Masayuki Nakano
c7f44326a7 Bug 1376424 - part0: Backout the patch for bug 1368554 r=m_kato
TextComposition in the main process is destroyed when the main process sends eCompositionCommit(AsIs) to focused remote process.  Therefore, ContentCacheInParent::mCompositionPendingCount is never 2 or more now.

It may cause ContentCacheInParent::Assign() setting older composition's start offset to current composition's start offset in the main process.

For making uplift the following patch easier, the wrong patch should be backed out first.

MozReview-Commit-ID: IHWc7qZBQtc
2017-06-27 22:02:07 +09:00
Masayuki Nakano
ff57c2228a Bug 1374207 - part2: TextComposition, IMEContentObserver and IMEStateManager should use EditorBase instead of nsIEditor r=m_kato
MozReview-Commit-ID: IdHmseTiv2t
2017-06-20 19:23:44 +09:00
Masayuki Nakano
bf2e198c3d Bug 1368554 ContentCacheInParent::mPendingCompositionCount should be decreased when TextCompositin which has dispatched composition events to corresponding remote process r=m_kato
ContentCacheInParent::mPendingCompositionCount is now managed with composition events which TabParent received. However, TextComposition doesn't dispatch composition events after coming request to commit active composition.  Therefore, composition is committed forcibly in a remote process over 255 times, the main process crashes.

It's the safest way to use TextComposition to manage ContentCacheInParent::mPendingCompositionCount.

MozReview-Commit-ID: DEhzYcK1zcW
2017-06-10 02:42:16 +09:00
Masayuki Nakano
cf51adc741 Bug 1250823 part 1 - Implement DocumentObserver as a nested class of IMEContentObserver for observing to begin and end update r=smaug
IMEContentObserver can reduce the number of times to compute node offsets with caching all added nodes as a range.  For that, it needs to know when it starts to update and ends updating the document.

nsIDocumentObserver is a subclass of nsIMutationObserver and IMEContentObserver is a mutation observer of editor's root content.  Therefore, if we change IMEContentObserver to a document observer, each mutation observer method needs to check if the change occurs in the observing editor.  Therefore, this patch implements document observer as its nested class and manages it as a member of IMEContentObserver.

MozReview-Commit-ID: HPSPfajxjnx
2017-06-08 11:21:28 +09:00
Masayuki Nakano
c8ae56e684 Bug 1342552 - IMEStateManager should cache nsIWidget for sPresContext and use it. r=smaug
IMEStateManager should cache nsIWidget for sPresContext at caching sPresContext.  Then, even if sPresContext has gone, IMEStateManager can clean up with the nsIWidget cache.

Unfortunately, editor has some bugs about calling IMEStateManager::UpdateIMEState().  That is, calling it *before* IMEStateManager::OnFocusChange().  In such case, this patch makes UpdateIMEState() ignore the call.

MozReview-Commit-ID: 1cydI03WyB8
2017-04-20 13:43:50 +09:00
btian
42dca2657a Bug 1357638 - Use Preferences::AddBoolVarCache() to accelerate dom.forms.inputmode access in IMEStateManager::SetIMEState(), r=masayuki
MozReview-Commit-ID: 8SMud0v3jFr
2017-04-21 14:48:36 +08:00
Olli Pettay
45822311b7 Bug 1351860 - Move mType from HTMLInputElement to nsIFormControl and make GetType non-virtual inlined, r=jessica 2017-03-31 22:49:00 -04:00
Olli Pettay
694b05ce02 Backout Bug 1351860, r=backout 2017-03-31 16:55:32 -04:00
Olli Pettay
fa83f6684e Bug 1351860 - Move mType from HTMLInputElement to nsIFormControl and make GetType non-virtual inlined, r=jessica 2017-03-31 13:13:36 -04:00
Tom Tromey
a4b717ab39 Bug 1060419 - make log_print use Printf.h, r=froydnj
MozReview-Commit-ID: BIZ1GQEZ1vs
2016-12-15 20:16:31 -07:00
Masayuki Nakano
b85b39eb1f Bug 1337718 part.9 Make IMEStateManager::OnClickInEditor() take const WidgetMouseEvent* instead of nsIDOMMouseEvent* r=m_kato
MozReview-Commit-ID: KdoMcxW8lkT
2017-02-08 22:29:14 +09:00
Masayuki Nakano
2524352445 Bug 1337718 part.7 Make IMEStateManager::OnMouseButtonEventInEditor() take WidgetMouseEvent* instead of nsIDOMMouseEvent r=m_kato
MozReview-Commit-ID: FDselwSymZq
2017-02-08 22:02:49 +09:00
Randell Jesup
34006e6308 Bug 1298169: use StaticRefPtr r=masayuki 2016-09-20 01:12:09 -04:00
Michael Layzell
419868d357 Bug 1018486 - Part 9: Changes to account for modifications to clang plugin, r=ehsan
MozReview-Commit-ID: EPQMbfHYxUK
2016-09-07 10:50:47 -04:00
Michael Layzell
f2f13378b5 Bug 1018486 - Part 1: Changes in dom/, r=baku
MozReview-Commit-ID: 4tCUM4KRe81
2016-09-07 10:50:35 -04:00
Kan-Ru Chen
a9b19d0584 Bug 1297276 - Rename mfbt/unused.h to mfbt/Unused.h for consistency. r=froydnj
The patch is generated from following command:

  rgrep -l unused.h|xargs sed -i -e s,mozilla/unused.h,mozilla/Unused.h,

MozReview-Commit-ID: AtLcWApZfES
2016-08-24 14:47:04 +08:00
Masayuki Nakano
bf0d875e97 Bug 1286730 IMEStateManager::NotifyIME() should treat NOTIFY_IME_OF_COMPOSITION_EVENT_HANDLED same as the other notifications because all of them are notified by IMEContentObserver asynchronously r=smaug
MozReview-Commit-ID: 1GJk9bfOqjS
2016-07-14 12:11:56 +09:00
Masayuki Nakano
5307069dfd Bug 1260651 part.59 Rename nsEditor to mozilla::EditorBase (and also their file names) r=mccr8
This patch also renames:

EditorInputEventDispatcher -> mozilla::EditorInputEventDispatcher

And some variable names are renamed from aEditor or mEditor to aEditorBase or mEditorBase for making their types clearer.

MozReview-Commit-ID: 2FCXWpLMn8e
2016-07-08 13:10:13 +09:00
Masayuki Nakano
d10c94c0b8 Bug 1284422 part.11 Remove "IMS: " and "IMEStateManager::" from log of IMEStateManager.cpp r=m_kato
MozReview-Commit-ID: K5PwEiHTJQX
2016-07-05 19:05:23 +09:00
Masayuki Nakano
ae0b6b60ab Bug 1276406 Remove "ime-enabled-state-changed" notification completely r=smaug
"ime-enabled-state-changed" notification was implemented for Android in bug 603848 but nobody currently observes this notification.  Therefore, we can stop notify the observer service of this.

MozReview-Commit-ID: 3TNHf1xWo2l
2016-05-31 18:39:43 +09:00
Masayuki Nakano
b8bf98ad12 Bug 1275918 part.2 Update TextComposition::mCompositionStartOffset when it's modified in the remote process r=m_kato
MozReview-Commit-ID: H1SJTWWav6G
2016-06-14 21:06:34 +09:00
Nicholas Nethercote
e6b063bd6a Bug 1278452 - Avoid a null deref in dom/events/. r=mccr8. 2016-06-07 16:03:34 +10:00
Masayuki Nakano
b171271773 Bug 1275906 part.2 TextComposition should use IMEContentObserver for sending NOTIFY_IME_OF_COMPOSITION_EVENT_HANDLED if the editor which has the composition is in the active IMEContentObserver r=smaug
For sending NOTIFY_IME_OF_COMPOSITION_EVENT_HANDLED after the other change notifications which was caused by the user input, we need to use IMEContentObserver::IMENotificationSender because it sends the notifications when it's safe to do it.

This patch makes TextComposition use IMEContentObserver to send the notification.  However, if there is no active IMEContentObserver, e.g., composition events are fired on unfocused window, TextComposition sends it by itself (same as current implementation).

If IMEContentObserver stops observing when it has pending NOTIFY_IME_OF_COMPOSITION_EVENT_HANDLED, it cannot send the notification (i.e., it is discarded completely in such case). However, in such case, IMEContentObserver sends NOTIFY_IME_OF_BLUR.  So, anyway, native IME handler should treat the blur notification as it including NOTIFY_IME_OF_COMPOSITION_EVENT_HANDLED.

On the other hand, we're buggy if composition events are fired in non-active window.  Even in such case, IMEContentObserver should be created for active editor in each document and it notifies IME of the changes. But this is out of the scope of this bug.

MozReview-Commit-ID: 7Q0ZsJTh4hX
2016-06-01 22:14:41 +09:00