Skip to content

Commit 4da7d4e

Browse files
committed
Revert "Bug 1953595 - Part 2: Add EventDispatcher implementation for iOS, r=glandium,geckoview-reviewers,nalexander" for causing gv-junit failures
This reverts commit 23eb140. Revert "Bug 1953595 - Part 1: Refactor EventDispatcher to be more embedder-agnostic, r=geckoview-reviewers,nalexander" This reverts commit 13b598f.
1 parent e67f064 commit 4da7d4e

13 files changed

+475
-1027
lines changed

mobile/shared/components/geckoview/GeckoViewHistory.cpp

Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
#include "GeckoViewHistory.h"
66

7+
#ifdef MOZ_WIDGET_ANDROID
8+
# include "JavaBuiltins.h"
9+
#endif
710
#include "jsapi.h"
811
#include "js/Array.h" // JS::GetArrayLength, JS::IsArrayObject
912
#include "js/PropertyAndElement.h" // JS_GetElement
@@ -29,8 +32,8 @@ using namespace mozilla::dom;
2932
using namespace mozilla::ipc;
3033
using namespace mozilla::widget;
3134

32-
static const nsLiteralString kOnVisitedMessage = u"GeckoView:OnVisited"_ns;
33-
static const nsLiteralString kGetVisitedMessage = u"GeckoView:GetVisited"_ns;
35+
static const char16_t kOnVisitedMessage[] = u"GeckoView:OnVisited";
36+
static const char16_t kGetVisitedMessage[] = u"GeckoView:GetVisited";
3437

3538
// Keep in sync with `GeckoSession.HistoryDelegate.VisitFlags`.
3639
enum class GeckoViewVisitFlags : int32_t {
@@ -238,7 +241,6 @@ NS_IMETHODIMP
238241
GeckoViewHistory::VisitURI(nsIWidget* aWidget, nsIURI* aURI,
239242
nsIURI* aLastVisitedURI, uint32_t aFlags,
240243
uint64_t aBrowserId) {
241-
AssertIsOnMainThread();
242244
if (!aURI) {
243245
return NS_OK;
244246
}
@@ -272,33 +274,28 @@ GeckoViewHistory::VisitURI(nsIWidget* aWidget, nsIURI* aURI,
272274
}
273275

274276
// If nobody is listening for this, we can stop now.
275-
if (!dispatcher->HasEmbedderListener(kOnVisitedMessage)) {
277+
if (!dispatcher->HasListener(kOnVisitedMessage)) {
276278
return NS_OK;
277279
}
278280

279-
dom::AutoJSAPI jsapi;
280-
NS_ENSURE_TRUE(jsapi.Init(xpc::PrivilegedJunkScope()), NS_OK);
281-
282-
JS::Rooted<JSObject*> bundle(jsapi.cx(), JS_NewPlainObject(jsapi.cx()));
283-
NS_ENSURE_TRUE(bundle, NS_OK);
284-
285-
JS::Rooted<JS::Value> value(jsapi.cx());
281+
#ifdef MOZ_WIDGET_ANDROID
282+
AutoTArray<jni::String::LocalRef, 3> keys;
283+
AutoTArray<jni::Object::LocalRef, 3> values;
286284

287285
nsAutoCString uriSpec;
288286
if (NS_WARN_IF(NS_FAILED(aURI->GetSpec(uriSpec)))) {
289287
return NS_OK;
290288
}
291-
NS_ENSURE_TRUE(ToJSValue(jsapi.cx(), uriSpec, &value), NS_OK);
292-
NS_ENSURE_TRUE(JS_SetProperty(jsapi.cx(), bundle, "url", value), NS_OK);
289+
keys.AppendElement(jni::StringParam(u"url"_ns));
290+
values.AppendElement(jni::StringParam(uriSpec));
293291

294292
if (aLastVisitedURI) {
295293
nsAutoCString lastVisitedURISpec;
296294
if (NS_WARN_IF(NS_FAILED(aLastVisitedURI->GetSpec(lastVisitedURISpec)))) {
297295
return NS_OK;
298296
}
299-
NS_ENSURE_TRUE(ToJSValue(jsapi.cx(), lastVisitedURISpec, &value), NS_OK);
300-
NS_ENSURE_TRUE(JS_SetProperty(jsapi.cx(), bundle, "lastVisitedURL", value),
301-
NS_OK);
297+
keys.AppendElement(jni::StringParam(u"lastVisitedURL"_ns));
298+
values.AppendElement(jni::StringParam(lastVisitedURISpec));
302299
}
303300

304301
int32_t flags = 0;
@@ -324,14 +321,26 @@ GeckoViewHistory::VisitURI(nsIWidget* aWidget, nsIURI* aURI,
324321
flags |=
325322
static_cast<int32_t>(GeckoViewVisitFlags::VISIT_UNRECOVERABLE_ERROR);
326323
}
327-
value = JS::Int32Value(flags);
328-
NS_ENSURE_TRUE(JS_SetProperty(jsapi.cx(), bundle, "flags", value), NS_OK);
324+
keys.AppendElement(jni::StringParam(u"flags"_ns));
325+
values.AppendElement(java::sdk::Integer::ValueOf(flags));
326+
327+
MOZ_ASSERT(keys.Length() == values.Length());
328+
329+
auto bundleKeys = jni::ObjectArray::New<jni::String>(keys.Length());
330+
auto bundleValues = jni::ObjectArray::New<jni::Object>(values.Length());
331+
for (size_t i = 0; i < keys.Length(); ++i) {
332+
bundleKeys->SetElement(i, keys[i]);
333+
bundleValues->SetElement(i, values[i]);
334+
}
335+
auto bundle = java::GeckoBundle::New(bundleKeys, bundleValues);
329336

330337
nsCOMPtr<nsIGeckoViewEventCallback> callback =
331338
new OnVisitedCallback(this, aURI);
332339

333340
Unused << NS_WARN_IF(
334341
NS_FAILED(dispatcher->Dispatch(kOnVisitedMessage, bundle, callback)));
342+
#endif
343+
335344
return NS_OK;
336345
}
337346

@@ -443,8 +452,6 @@ void GeckoViewHistory::QueryVisitedState(nsIWidget* aWidget,
443452
ContentParent* aInterestedProcess,
444453
nsTArray<RefPtr<nsIURI>>&& aURIs) {
445454
MOZ_ASSERT(XRE_IsParentProcess());
446-
AssertIsOnMainThread();
447-
448455
RefPtr<nsWindow> window = nsWindow::From(aWidget);
449456
if (NS_WARN_IF(!window)) {
450457
return;
@@ -455,34 +462,38 @@ void GeckoViewHistory::QueryVisitedState(nsIWidget* aWidget,
455462
}
456463

457464
// If nobody is listening for this we can stop now
458-
if (!dispatcher->HasEmbedderListener(kGetVisitedMessage)) {
465+
if (!dispatcher->HasListener(kGetVisitedMessage)) {
459466
return;
460467
}
461468

462-
dom::AutoJSAPI jsapi;
463-
NS_ENSURE_TRUE_VOID(!jsapi.Init(xpc::PrivilegedJunkScope()));
464-
465-
nsTArray<nsCString> specs(aURIs.Length());
466-
for (auto& uri : aURIs) {
469+
#ifdef MOZ_WIDGET_ANDROID
470+
// Assemble a bundle like `{ urls: ["http://example.com/1", ...] }`.
471+
auto uris = jni::ObjectArray::New<jni::String>(aURIs.Length());
472+
for (size_t i = 0; i < aURIs.Length(); ++i) {
467473
nsAutoCString uriSpec;
468-
if (NS_WARN_IF(NS_FAILED(uri->GetSpec(uriSpec)))) {
474+
if (NS_WARN_IF(NS_FAILED(aURIs[i]->GetSpec(uriSpec)))) {
469475
continue;
470476
}
471-
specs.AppendElement(uriSpec);
477+
jni::String::LocalRef value{jni::StringParam(uriSpec)};
478+
uris->SetElement(i, value);
472479
}
473480

474-
JS::Rooted<JS::Value> urls(jsapi.cx());
475-
NS_ENSURE_TRUE_VOID(ToJSValue(jsapi.cx(), specs, &urls));
481+
auto bundleKeys = jni::ObjectArray::New<jni::String>(1);
482+
jni::String::LocalRef key(jni::StringParam(u"urls"_ns));
483+
bundleKeys->SetElement(0, key);
484+
485+
auto bundleValues = jni::ObjectArray::New<jni::Object>(1);
486+
jni::Object::LocalRef value(uris);
487+
bundleValues->SetElement(0, value);
476488

477-
JS::Rooted<JSObject*> bundle(jsapi.cx(), JS_NewPlainObject(jsapi.cx()));
478-
NS_ENSURE_TRUE_VOID(bundle);
479-
NS_ENSURE_TRUE_VOID(JS_SetProperty(jsapi.cx(), bundle, "urls", urls));
489+
auto bundle = java::GeckoBundle::New(bundleKeys, bundleValues);
480490

481491
nsCOMPtr<nsIGeckoViewEventCallback> callback =
482492
new GetVisitedCallback(this, aInterestedProcess, std::move(aURIs));
483493

484494
Unused << NS_WARN_IF(
485495
NS_FAILED(dispatcher->Dispatch(kGetVisitedMessage, bundle, callback)));
496+
#endif
486497
}
487498

488499
/**

0 commit comments

Comments
 (0)