Commit Graph

761 Commits

Author SHA1 Message Date
Randall Barker
cf1d8a561d Bug 1328752 - part 2, Update Android nsWindow to use UiCompositorControllerChild in place of CompositorBridgeParent r=jchen 2017-01-20 11:01:29 -08:00
Jim Chen
1ddea3c504 Bug 1330515 - Try to recover from IME errors; r=esawin
Instead of throwing IME exceptions, try to recover from IME errors by
flushing the entire text unless we already tried that before. This
prevents annoying crashes, and deals with known IME bugs that are too
risky to uplift to older releases.
2017-01-13 14:39:27 -05:00
Nicholas Nethercote
dea84b8d8b Bug 1325234 (part 10) - Final nsIWidget deCOMtamination clean-ups. r=mstange.
This patch converts some NS_IMETHOD and NS_IMETHODIMP occurrences that I missed
in previous bugs.

The patch also removes the Android
nsWindow::{Get,Set}HasTransparentBackground() functions because they're unused.
2016-12-21 15:58:09 +11:00
Nicholas Nethercote
0aafa0e5ec Bug 1325234 (part 9) - Remove remaining NS_IMETHOD_ occurrences from nsIWidget. r=mstange.
|virtual T| is clearer than |NS_IMETHOD_(T)|.
2016-12-21 15:27:20 +11:00
Nicholas Nethercote
bc88544c2d Bug 1325234 (part 8) - Streamline nsIWidget::DispatchEvent. r=jimm.
This patch changes it from |NS_IMETHOD| to |virtual nsresult| because some
callsites are checked and some aren't.
2016-12-21 11:18:40 +11:00
Nicholas Nethercote
343e7a7830 Bug 1325234 (part 4) - Streamline nsIWidget::{SetFocus,SetNonClientMargins}(). r=mstange.
This patch changes them from |NS_IMETHOD| to |virtual nsresult|.
2016-12-21 11:13:08 +11:00
Nicholas Nethercote
d3809ce662 Bug 1325234 (part 3) - Streamline nsIWidget::Show(). r=mstange.
This patch changes it from |NS_IMETHOD| to |virtual void|. The return value was
only checked in one low-value assertion and one other place where the check had
no useful effect (in nsCocoaWindow::HideWindowChrome()).
2016-12-21 11:12:54 +11:00
Nicholas Nethercote
dc2aa85dd7 Bug 1325234 (part 2) - Streamline nsIWidget::Invalidate(). r=jimm.
This patch changes it from |NS_IMETHOD| to |virtual void|. The return value was
only checked in one low-value assertion so I decided it wasn't needed.
2016-12-20 09:55:32 +11:00
Randall Barker
9fc1785356 Bug 1319850 - part 4, Code to initialize and support AndroidUI MessageLoop and nsIThread r=nfroyd 2016-12-23 09:08:35 -08:00
Wes Kocher
9a887d113a Backed out 4 changesets (bug 1319850) for android xpcshell bustage a=backout
Backed out changeset 15b92bb6d810 (bug 1319850)
Backed out changeset e31107c3f677 (bug 1319850)
Backed out changeset 2a8012945a74 (bug 1319850)
Backed out changeset 8717bea884c9 (bug 1319850)
2016-12-22 18:16:34 -08:00
Randall Barker
588f44aa16 Bug 1319850 - part 4, Code to initialize and support AndroidUI MessageLoop and nsIThread r=nfroyd 2016-12-22 16:15:14 -08:00
Jim Chen
7adb4a17c0 Bug 1322574 - 3. Count NPZC events as UI events; r=rbarker
Post NPZC events as an Event subclass that identifies as an UI event.
This also lets us avoid some redundant code in the event lambda.
2016-12-21 13:37:20 -05:00
Nicholas Nethercote
ba591e22dd Bug 1299335 (part 8) - Streamline nsIWidget::Enable. r=mstange.
This patch changes it from |NS_IMETHOD| to |virtual void| because every
implementation of these functions always returns |NS_OK|.
2016-12-19 20:54:16 +11:00
Nicholas Nethercote
aaca44be3c Bug 1299335 (part 7) - Streamline nsIWidget::{Move,Resize}. r=mstange.
This patch changes them from |NS_IMETHOD| to |virtual void| because every
implementation of these functions always returns |NS_OK|.
2016-12-19 20:54:03 +11:00
Nicholas Nethercote
545f84822e Bug 1299335 (part 3) - Streamline nsIWidget::SetParent. r=mstange.
This patch removes its return value, because none of the call sites check it
except for one non-vital assertion.
2016-12-16 10:54:11 +11:00
Masayuki Nakano
df9ecea5c4 Bug 1274503 part.2 Add KeyboardEvent.key value mapping on Android which are not mapped by Gecko but mapped on Chromium r=smaug
First, we should get rid of "Unidentified" keys which are mapped to specific value on Chromium and we can agree without any discussion.

MozReview-Commit-ID: C4TZzndahNM
2016-12-01 21:38:54 +09:00
Nick Alexander
6af2a279bf Bug 1320587 - Force first paint when (re-)attaching Gecko to Java. r=jchen
MozReview-Commit-ID: 6vUbIXTPNLQ
2016-11-29 23:12:53 -08:00
Jim Chen
0f80faec13 Bug 1307820 - Implement per-GeckoView messaging; r=snorp r=sebastian
Bug 1307820 - 1a. Move GeckoApp EventDispatcher to GeckoView; r=snorp

Make it a GeckoView-specific EventDispatcher instead of
GeckoApp-specific, so that GeckoView consumers can benefit from a
per-view EventDispatcher. In addition, a few events like Gecko:Ready are
moved back to the global EventDispatcher because that makes more sense.

Bug 1307820 - 1b. Don't use GeckoApp EventDispatcher during inflation; r=snorp

During layout inflation, we don't yet have GeckoView and therefore the
GeckoView EventDispatcher, so we should not register events until later,
typically during onAttachedToWindow.

Bug 1307820 - 2. Introduce GeckoBundle; r=snorp

The Android Bundle class has several disadvantages when used for holding
structured data from JS.

The most obvious one is the differentiation between int and double,
which doesn't exist in JS. So when a JS number is converted to either a
Bundle int or double, we run the risk of making a wrong conversion,
resulting in a type mismatch exception when Java uses the Bundle. This
extends to number arrays from JS.

There is one more gotcha when using arrays. When we receive an empty
array from JS, there is no way for us to determine the type of the
array, because even empty arrays in Java have types. We are forced to
pick an arbitrary type like boolean[], which can easily result in a type
mismatch exception when using the array on the Java side.

In addition, Bundle is fairly cumbersome, and we cannot access the inner
structures of Bundle from Java or JNI, making it harder to use.

With these factors in mind, this patch introduces GeckoBundle as a
better choice for Gecko/Java communication. It is almost fully
API-compatible with the Android Bundle; only the Bundle array methods
are different. It resolves the numbers problem by performing conversions
if necessary, and it is a lot more lightweight than Bundle.

Bug 1307820 - 3. Convert BundleEventListener to use GeckoBundle; r=snorp

Convert BundleEventListener from using Bundle to using GeckoBundle.
Because NativeJSContainer still only supports Bundle, we do an extra
conversion when sending Bundle messages, but eventually, as we eliminate
the use of NativeJSContainer, that will go away as well.

Bug 1307820 - 4. Introduce EventDispatcher interfaces; r=snorp

Introduce several new XPCOM interfaces for the new EventDispatcher API,
these interfaces are mostly mirrored after their Java counterparts.

* nsIAndroidEventDispatcher is the main interface for
  registering/unregistering listeners and for dispatching events from
  JS/C++.

* nsIAndroidEventListener is the interface that JS/C++ clients implement
  to receive events.

* nsIAndroidEventCallback is the interface that JS/C++ clients implement
  to receive responses from dispatched events.

* nsIAndroidView is the new interface that every window receives
  that is specific to the window/GeckoView pair. It is passed to chrome
  scripts through window arguments.

Bug 1307820 - 5. Remove EventDispatcher references from gfx code; r=snorp

EventDispatcher was used for JPZC, but NPZC doesn't use it anymore.

Bug 1307820 - 6. General JNI template improvements; r=snorp

This patch includes several improvements to the JNI templates.

* Context::RawClassRef is removed to avoid misuse, as Context::ClassRef
  should be used instead.

* Fix a compile error, in certain usages, in the DisposeNative overload
  in NativeStub.

* Add Ref::IsInstanceOf and Context::IsInstanceOf to mirror the
  JNIEnv::IsInstanceOf call.

* Add Ref::operator* and Context::operator* to provide an easy way to
  get a Context object.

* Add built-in declarations for boxed Java objects (e.g. Boolean,
  Integer, etc).

* Add ObjectArray::New for creating new object arrays of specific types.

* Add lvalue qualifiers to LocalRef::operator= and GlobalRef::operator=,
  to prevent accidentally assigning to rvalues. (e.g.
  `objectArray->GetElement(0) = newObject;`, which won't work as intended.)

Bug 1307820 - 7. Support ownership through RefPtr for native JNI objects; r=snorp

In addition to direct ownership and weak pointer ownership, add a third
ownership model where a native JNI object owns a RefPtr that holds a
strong reference to the actual C++ object. This ownership model works
well with ref-counted objects such as XPCOM objects, and is activated
through the presence of public members AddRef() and Release() in the C++
object.

Bug 1307820 - 8. Implement Gecko-side EventDispatcher; r=snorp

Add a skeletal implementation of EventDispatcher on the Gecko side.
Each widget::EventDispatcher will be associated with a Java
EventDispatcher, so events can be dispatched from Gecko to Java and vice
versa. AndroidBridge and nsWindow will implement
nsIAndroidEventDispatcher through widget::EventDispatcher.

Other patches will add more complete functionality such as
GeckoBundle/JSObject translation and support for callbacks.

Bug 1307820 - 9. Implement dispatching between Gecko/Java; r=snorp

Implement translation between JSObject and GeckoBundle, and use that for
dispatching events from Gecko to Java and vice versa.

Bug 1307820 - 10. Implement callback support; r=snorp

Implement callback support for both Gecko-to-Java events and
Java-to-Gecko events.

For Gecko-to-Java, we translate nsIAndroidEventCallback to a Java
EventCallback through NativeCallbackDelegate and pass it to the Java
listener.

For Java-to-Gecko, we translate EventCallback to a
nsIAndroidEventCallback through JavaCallbackDelegate and pass it to the
Gecko listener.  There is another JavaCallbackDelegate on the Java side
that redirects the callback to a particular thread. For example, if the
event was dispatched from the UI thread, we make sure the callback
happens on the UI thread as well.

Bug 1307820 - 11. Add BundleEventListener support for Gecko thread; r=snorp

Add support for BundleEventListener on the Gecko thread, so that we can
use it to replace any existing GeckoEventListener or NativeEventListener
implementations that require the listener be run synchronously on the
Gecko thread.

Bug 1307820 - 12. Add global EventDispatcher in AndroidBridge; r=snorp

Add an instance of EventDispatcher to AndroidBridge to act as a global
event dispatcher.

Bug 1307820 - 13. Add per-nsWindow EventDispatcher; r=snorp

Add an instance of EventDispatcher to each nsWindow through an
AndroidView object, which implements nsIAndroidView. The nsIAndroidView
is passed to the chrome script through the window argument when opening
the window.

Bug 1307820 - 14. Update auto-generated bindings; r=me

Bug 1307820 - 15. Update testEventDispatcher; r=snorp

Update testEventDispatcher to include new functionalities in
EventDisptcher.

* Add tests for dispatching events to UI/background thread through
  nsIAndroidEventDispatcher::dispatch.

* Add tests for dispatching events to UI/background thread through
  EventDispatcher.dispatch.

* Add tests for dispatching events to Gecko thread through
  EventDispatcher.dispatch.

Each kind of test exercises both the global EventDispatcher through
EventDispatcher.getInstance() and the per-GeckoView EventDispatcher
through GeckoApp.getEventDispatcher().
2016-11-14 21:29:50 +08:00
Kartikaya Gupta
0c8045c0a3 Bug 1315706 - Pass a wrapper struct to various CompositorWidget functions. r=dvander
This is the first step in using these functions without having a
LayerManagerComposite at all.

MozReview-Commit-ID: 2zkuB7Ox4Ut
2016-11-07 21:16:52 -05:00
Jim Chen
891b631e9b Bug 1307816 - 15. Use eContentCommandDelete for deleting text; r=esawin
Use a separate delete command for deleting text, because using regular
composition events for deleting text doesn't seem to work well in
Facebook comment boxes.
2016-10-25 12:28:54 -04:00
Jim Chen
1137eca8e4 Bug 1307816 - 14. Save composition update for later; r=esawin
Turns out the Facebook comment box doesn't work well if we send
compositions alongside set/remove span events. This patch adds back the
update composition flag, but only sends composition when necessary,
which is only right before we send key events.

Because onImeUpdateComposition is no longer associated with a separate
action, it no longer sends back a reply using AutoIMESynchronize.
2016-10-25 12:28:54 -04:00
Jim Chen
050b3bad73 Bug 1307816 - 13. Expand RemoveIMEComposition to allow canceling; r=esawin
Expand RemoveIMEComposition with a flag to allow canceling the
composition. Also, remove the "ideographic space" hack from before
because it's no longer applicable (the test remains so we can catch
any regressions).
2016-10-25 12:28:54 -04:00
Jim Chen
15a14b87ff Bug 1307816 - 7. Flush text before sending focus event; r=esawin
We used to flush the Java side text upon receiving the acknowledge-focus
event, at which point the Java side is waiting on the Gecko side.
Because of the async IME refactoring, we can no longer wait on the Java
side, so we have to flush the text early, before sending the first focus
notification. Also, the acknowledge-focus event is no longer needed as a
result.

Our call to InputMethodManager to restart input also has to changed due
to the change in calling sequence between notifyIME and
notifyIMEContext.
2016-10-25 12:28:53 -04:00
KuoE0
735e3ea310 Bug 1282003 - (Part 3) Add screen ID to nsWindow and GeckoView to get the correct nsScreen and density. r=snorp
MozReview-Commit-ID: Cd9MS2I1RRQ
2016-09-29 14:23:56 +08:00
James Willcox
1b7ed449e0 Bug 1308534 - Use e10s in GeckoView r=jchen 2016-10-17 15:05:35 -05:00
Eric Rahm
fab6d3cda5 Bug 1310023 - Use nsIArray rather than nsISupportsArray for window args in widget. r=froydnj
This just swaps out the usage nsISupportsArray with nsIArray when opening a
window. |nsIWindowWatcher.OpenWindow| supports both interfaces, so no changes
are needed there.
2016-10-14 12:51:17 -07:00
Kartikaya Gupta
35db38d8c5 Bug 1309228 - Now that the width and height arguments are no longer needed in browser.js, remove those too. r=rbarker
MozReview-Commit-ID: 8F4qiq1qEmk
2016-10-11 10:17:28 -04:00
Sebastian Hengst
9117c90e52 Backed out changeset 1d7748535fa3 (bug 1282003) 2016-10-06 20:37:00 +02:00
KuoE0
ed9d81a85f Bug 1282003 - (Part 3) Add screen ID to nsWindow and GeckoView to get the correct nsScreen and density. r=snorp
MozReview-Commit-ID: Cd9MS2I1RRQ
2016-09-29 14:23:56 +08:00
Jim Chen
7aee9dca9f Bug 1306083 - 3. Remove obsolete code from AndroidBridge; r=snorp
Remove the global layer client object from AndroidBridge, now that it's
no longer used. Also remove other associated calls that are no longer
used.
2016-10-03 12:26:00 -04:00
Jim Chen
e32ed5b400 Bug 1306083 - 1. Use AndroidCompositorWidget to access GeckoLayerClient; r=kats
Add AndroidCompositorWidget to act as the intermediary between gfx code
and GeckoLayerClient, in place of AndroidBridge. AndroidCompositorWidget
currently inherits from InProcessCompositorWidget, but when Android
eventually supports OOP compositing, it will be made to inherit from
CompositorWidget directly.
2016-10-03 12:26:00 -04:00
Jim Chen
31d505d8ba Bug 1305271 - 2. Add and use jni::IsFennec() for Fennec-only code; r=snorp
Add jni::IsFennec() that returns whether we're in a Fennec environment
(defined as the presence of the GeckoApp class). Then, add
jni::IsFennec() checks to places where we use JNI for Fennec-only classes.
2016-09-28 23:49:25 -04:00
Jim Chen
bf2169c56b Bug 1291375 - 5. Use Fennec bindings where needed; r=snorp
Switch include statements from GeckoView bindings to Fennec bindings
where needed.
2016-09-16 15:13:48 -04:00
Randall Barker
073f710cca Bug 1297853 - White flash when creating a private browsing tab r=jchen,kats 2016-09-06 18:01:36 -07:00
Nicholas Nethercote
0b90da4f50 Bug 1296993 (part 5) - Streamline nsIWidget::SetWindow{ShadowStyle,TitlebarColor,Class}. r=mstange.
This patch does the following.

- Removes the return value, because none of the call sites check it.

- Removes the empty implementations from the android nsIWidget instance,
  because it can use the nsBaseWidget one.
2016-08-25 13:43:27 +10:00
Nicholas Nethercote
e31e3f0c52 Bug 1296993 (part 4) - Streamline nsIWidget::PlaceBehind. r=mstange.
This patch does the following.

- Removes the return value, because none of the call sites check it.

- Removes the empty implementations from several nsIWidget instances, because
  they can use the nsBaseWidget one.
2016-08-25 13:43:27 +10:00
Nicholas Nethercote
4ddf0a183d Bug 1296993 (part 3) - Streamline nsIWidget::ConstrainPosition. r=mstange.
This patch does the following.

- Removes the return value, because none of the call sites check it.

- Puts an empty implementation into nsBaseWidget.

- Removes the empty implementations from several nsIWidget instances, because
  they can use the nsBaseWidget one.
2016-08-25 13:43:27 +10:00
Nicholas Nethercote
36a9b74cff Bug 1296993 (part 2) - Streamline nsIWidget::Set{,Fake}Modal. r=mstange.
This patch does the following.

- Removes the return value, because none of the call sites check it.

- Removes the empty implementations from several nsIWidget instances, because
  they can use the nsBaseWidget one.
2016-08-25 13:43:26 +10:00
Nicholas Nethercote
5909b3a033 Bug 1296993 (part 1) - Streamline nsIWidget::ReparentNativeWidget. r=mstange.
This patch does the following.

- Removes the return value, because none of the call sites check it.

- Puts an empty implementation into nsBaseWidget.

- Removes the empty implementations from several nsIWidget instances, because
  they can use the nsBaseWidget one.
2016-08-25 13:43:26 +10:00
Jim Chen
2256784f55 Bug 1297836 - Get surface when creating or resuming compositor; r=snorp
Get rid of LayerView.Compositor.getSurface and just pass in the surface
when creating or resuming the compositor. That also lets us get rid of
some synchronization required for getSurface.
2016-08-26 12:25:57 -04:00
Jim Chen
67eb1b9a4d Bug 1297836 - Don't use WindowEvent for LayerViewSupport; r=snorp
Now that nsWindow doesn't own LayerViewSupport, we shouldn't be using
WindowEvent for LayerViewSupport calls. This patch converts the calls
that dispatch to proxy to dispatch directly to Gecko. For
SyncResumeResizeCompositor, it used a proxy to call OnResumedCompositor
on the Gecko thread; this patch makes SyncResumeResizeCompositor post an
event to call OnResumedCompositor directly, without going through the
proxy.
2016-08-26 12:25:57 -04:00
Randall Barker
db31614cf1 Bug 1297850 - part 1, Remove dead code left behind after JPZ removal. r=jchen 2016-08-25 17:26:42 -07:00
Wes Kocher
0003442039 Backed out 2 changesets (bug 1297850) for robocop bustage a=backout CLOSED TREE
Backed out changeset e83c9eb279a9 (bug 1297850)
Backed out changeset 979694026137 (bug 1297850)
2016-08-25 11:29:35 -07:00
Randall Barker
8ff0253575 Bug 1297850 - part 1, Remove dead code left behind after JPZ removal. r=jchen 2016-08-25 08:14:52 -07: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
Jim Chen
bc288d3a58 Bug 1296757 - Correctly resume compositor when reattaching; r=snorp
We need to set the compositor-created flag in LayerView correctly when
reattaching to a new LayerView, so that we resume the compositor instead
of trying to create the compositor again, which we already did
previously.

This patch consists of general code cleanup and a new reattach method in
LayerView.Compositor that we call in order to set the compositor-created
flag correctly.
2016-08-23 18:55:12 -04:00
Nicholas Nethercote
ab7ae3b80d Bug 1293596 (part 7) - Make nsIWidget::Destroy infallible. r=karlt. 2016-08-10 10:04:11 +10:00
Nicholas Nethercote
628ec722f3 Bug 1293596 (part 6) - Make nsIWidget::SetSizeMode() infallible. r=mstange,baku.
The only implementation of SetSizeMode() that can fail is the nsCocoaWindow
one, on an Objective C exception, which is unlikely and can be swallowed.

This allows some nsGlobalWindow functions to become infallible as well.
2016-08-22 09:15:49 +10:00
Jim Chen
785255eac9 Bug 1294479 - Remove presentation methods from nsWindow/AndroidBridge; r=snorp
Remove the presentation methods from nsWindow/AndroidBridge now that
they are not used. This also eliminates gGeckoViewWindow from nsWindow.
NS_PRESENTATION_WINDOW and NS_PRESENTATION_SURFACE constants are added
for GetNativeData/SetNativeData to provide replacements that support
multiple GeckoViews/nsWindows.
2016-08-19 17:17:24 -04:00
Jim Chen
1a98b320ee Bug 1294479 - Add native methods in PresentationMediaPlayerManager; r=snorp
Put presentation surface native methods in PMPM Instead of in
GeckoAppShell, and also make these methods work with multiple GeckoViews
by having them take a GeckoView parameter if necessary. This also lets
us eliminate the static nsWindow reference in nsWindow.cpp.
2016-08-19 17:17:24 -04:00