author | Jim Chen <nchen@mozilla.com> |
Thu, 18 May 2017 18:09:16 -0400 | |
changeset 359215 | d8df517d010dd09af3624e95c239664d2c81e0b4 |
parent 359214 | 6f5485d306e1803e4292b30129270eabd0501398 |
child 359216 | e60ff2b6e9e978fcfb5dd5cf6248d7297bd8d878 |
push id | 31850 |
push user | ryanvm@gmail.com |
push date | Fri, 19 May 2017 15:47:16 +0000 |
treeherder | mozilla-central@c800b6dfca67 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | droeh |
bugs | 1365127 |
milestone | 55.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java +++ b/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java @@ -2955,45 +2955,16 @@ public abstract class GeckoApp extends G // GeckoApp does not need to record any health information - return a stub. return new StubbedHealthRecorder(); } protected void recordStartupActionTelemetry(final String passedURL, final String action) { } @Override - public void checkUriVisited(String uri) { - GlobalHistory.getInstance().checkUriVisited(uri); - } - - @Override - public void markUriVisited(final String uri) { - final Context context = getApplicationContext(); - final BrowserDB db = BrowserDB.from(context); - ThreadUtils.postToBackgroundThread(new Runnable() { - @Override - public void run() { - GlobalHistory.getInstance().add(context, db, uri); - } - }); - } - - @Override - public void setUriTitle(final String uri, final String title) { - final Context context = getApplicationContext(); - final BrowserDB db = BrowserDB.from(context); - ThreadUtils.postToBackgroundThread(new Runnable() { - @Override - public void run() { - GlobalHistory.getInstance().update(context.getContentResolver(), db, uri, title); - } - }); - } - - @Override public String[] getHandlersForMimeType(String mimeType, String action) { Intent intent = IntentHelper.getIntentForActionString(action); if (mimeType != null && mimeType.length() > 0) intent.setType(mimeType); return IntentHelper.getHandlersForIntent(intent); } @Override
--- a/mobile/android/base/java/org/mozilla/gecko/GlobalHistory.java +++ b/mobile/android/base/java/org/mozilla/gecko/GlobalHistory.java @@ -6,16 +6,17 @@ package org.mozilla.gecko; import java.lang.ref.SoftReference; import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; import java.util.Set; +import org.mozilla.gecko.annotation.WrapForJNI; import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.reader.ReaderModeUtils; import org.mozilla.gecko.util.GeckoBundle; import org.mozilla.gecko.util.ThreadUtils; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; @@ -144,17 +145,46 @@ class GlobalHistory { db.updateHistoryTitle(cr, uriToStore, title); final long end = SystemClock.uptimeMillis(); final long took = end - start; Telemetry.addToHistogram(TELEMETRY_HISTOGRAM_UPDATE, (int) Math.min(took, Integer.MAX_VALUE)); } - public void checkUriVisited(final String uri) { + @WrapForJNI(stubName = "CheckURIVisited", calledFrom = "gecko") + private static void checkUriVisited(final String uri) { + getInstance().checkVisited(uri); + } + + @WrapForJNI(stubName = "MarkURIVisited", calledFrom = "gecko") + private static void markUriVisited(final String uri) { + final Context context = GeckoAppShell.getApplicationContext(); + final BrowserDB db = BrowserDB.from(context); + ThreadUtils.postToBackgroundThread(new Runnable() { + @Override + public void run() { + getInstance().add(context, db, uri); + } + }); + } + + @WrapForJNI(stubName = "SetURITitle", calledFrom = "gecko") + private static void setUriTitle(final String uri, final String title) { + final Context context = GeckoAppShell.getApplicationContext(); + final BrowserDB db = BrowserDB.from(context); + ThreadUtils.postToBackgroundThread(new Runnable() { + @Override + public void run() { + getInstance().update(context.getContentResolver(), db, uri, title); + } + }); + } + + /* protected */ void checkVisited(final String uri) { final String storedURI = ReaderModeUtils.stripAboutReaderUrl(uri); final NotifierRunnable runnable = new NotifierRunnable(GeckoAppShell.getContext()); mHandler.post(new Runnable() { @Override public void run() { // this runs on the same handler thread as the processing loop, // so no synchronization needed
--- a/mobile/android/components/build/nsAndroidHistory.cpp +++ b/mobile/android/components/build/nsAndroidHistory.cpp @@ -2,17 +2,17 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsThreadUtils.h" #include "nsAndroidHistory.h" #include "nsComponentManagerUtils.h" #include "nsIURI.h" #include "nsIObserverService.h" -#include "GeneratedJNIWrappers.h" +#include "FennecJNIWrappers.h" #include "Link.h" #include "mozilla/Services.h" #include "mozilla/Preferences.h" #define NS_LINK_VISITED_EVENT_TOPIC "link-visited" // We copy Places here. @@ -71,18 +71,18 @@ nsAndroidHistory::RegisterVisitedCallbac nsTArray<Link*>* list = mListeners.Get(uriString); if (! list) { list = new nsTArray<Link*>(); mListeners.Put(uriString, list); } list->AppendElement(aContent); - if (jni::IsAvailable()) { - java::GeckoAppShell::CheckURIVisited(uriString); + if (jni::IsFennec()) { + java::GlobalHistory::CheckURIVisited(uriString); } return NS_OK; } NS_IMETHODIMP nsAndroidHistory::UnregisterVisitedCallback(nsIURI *aURI, Link *aContent) { @@ -194,21 +194,21 @@ nsAndroidHistory::Notify(nsITimer *timer return NS_OK; } void nsAndroidHistory::SaveVisitURI(nsIURI* aURI) { // Add the URI to our cache so we can take a fast path later AppendToRecentlyVisitedURIs(aURI); - if (jni::IsAvailable()) { + if (jni::IsFennec()) { // Save this URI in our history nsAutoCString spec; (void)aURI->GetSpec(spec); - java::GeckoAppShell::MarkURIVisited(NS_ConvertUTF8toUTF16(spec)); + java::GlobalHistory::MarkURIVisited(NS_ConvertUTF8toUTF16(spec)); } // Finally, notify that we've been visited. nsCOMPtr<nsIObserverService> obsService = mozilla::services::GetObserverService(); if (obsService) { obsService->NotifyObservers(aURI, NS_LINK_VISITED_EVENT_TOPIC, nullptr); } } @@ -278,26 +278,26 @@ nsAndroidHistory::SetURITitle(nsIURI *aU if (!canAdd) { return NS_OK; } if (IsEmbedURI(aURI)) { return NS_OK; } - if (jni::IsAvailable()) { + if (jni::IsFennec()) { nsAutoCString uri; nsresult rv = aURI->GetSpec(uri); if (NS_FAILED(rv)) return rv; if (RemovePendingVisitURI(aURI)) { // We have a title, so aURI isn't a redirect, so save the visit now before setting the title. SaveVisitURI(aURI); } NS_ConvertUTF8toUTF16 uriString(uri); - java::GeckoAppShell::SetURITitle(uriString, aTitle); + java::GlobalHistory::SetURITitle(uriString, aTitle); } return NS_OK; } NS_IMETHODIMP nsAndroidHistory::NotifyVisited(nsIURI *aURI) { if (aURI && sHistory) {
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/BaseGeckoInterface.java +++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/BaseGeckoInterface.java @@ -30,31 +30,16 @@ public class BaseGeckoInterface implemen @Override public void addAppStateListener(GeckoAppShell.AppStateListener listener) {} // Bug 908787: Implement this @Override public void removeAppStateListener(GeckoAppShell.AppStateListener listener) {} @Override - public void checkUriVisited(String uri) { - // By default, no URIs are considered visited. - } - - @Override - public void markUriVisited(final String uri) { - // By default, no URIs are marked as visited. - } - - @Override - public void setUriTitle(final String uri, final String title) { - // By default, no titles are associated with URIs. - } - - @Override public void setAccessibilityEnabled(boolean enabled) { // By default, take no action when accessibility is toggled on or off. } @Override public boolean openUriExternal(String targetURI, String mimeType, String packageName, String className, String action, String title) { // By default, never open external URIs. return false;
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java +++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java @@ -1661,50 +1661,16 @@ public class GeckoAppShell } public interface GeckoInterface { public void enableOrientationListener(); public void disableOrientationListener(); public void addAppStateListener(AppStateListener listener); public void removeAppStateListener(AppStateListener listener); - /** - * Check if the given URI is visited. - * <p/> - * If it has been visited, call {@link GeckoAppShell#notifyUriVisited(String)}. (If it - * has not been visited, do nothing.) - * <p/> - * This method is always invoked on the Gecko thread. - * - * @param uri to check. - */ - public void checkUriVisited(String uri); - - /** - * Mark the given URI as visited in Gecko. - * <p/> - * Implementors may maintain some local store of visited URIs in order to be able to - * answer {@link #checkUriVisited(String)} requests affirmatively. - * <p/> - * This method is always invoked on the Gecko thread. - * - * @param uri to mark. - */ - public void markUriVisited(final String uri); - - /** - * Set the title of the given URI, as determined by Gecko. - * <p/> - * This method is always invoked on the Gecko thread. - * - * @param uri given. - * @param title to associate with the given URI. - */ - public void setUriTitle(final String uri, final String title); - public void setAccessibilityEnabled(boolean enabled); public boolean openUriExternal(String targetURI, String mimeType, String packageName, String className, String action, String title); public String[] getHandlersForMimeType(String mimeType, String action); public String[] getHandlersForURL(String url, String action); /** @@ -1858,43 +1824,16 @@ public class GeckoAppShell GeckoBatteryManager.disableNotifications(); } @WrapForJNI(calledFrom = "gecko") private static double[] getCurrentBatteryInformation() { return GeckoBatteryManager.getCurrentInformation(); } - @WrapForJNI(stubName = "CheckURIVisited", calledFrom = "gecko") - private static void checkUriVisited(String uri) { - final GeckoInterface geckoInterface = getGeckoInterface(); - if (geckoInterface == null) { - return; - } - geckoInterface.checkUriVisited(uri); - } - - @WrapForJNI(stubName = "MarkURIVisited", calledFrom = "gecko") - private static void markUriVisited(final String uri) { - final GeckoInterface geckoInterface = getGeckoInterface(); - if (geckoInterface == null) { - return; - } - geckoInterface.markUriVisited(uri); - } - - @WrapForJNI(stubName = "SetURITitle", calledFrom = "gecko") - private static void setUriTitle(final String uri, final String title) { - final GeckoInterface geckoInterface = getGeckoInterface(); - if (geckoInterface == null) { - return; - } - geckoInterface.setUriTitle(uri, title); - } - @WrapForJNI(calledFrom = "gecko") private static void hideProgressDialog() { // unused stub } /* Called by JNI from AndroidBridge, and by reflection from tests/BaseTest.java.in */ @WrapForJNI(calledFrom = "gecko") @RobocopTarget
--- a/widget/android/GeneratedJNIWrappers.cpp +++ b/widget/android/GeneratedJNIWrappers.cpp @@ -108,24 +108,16 @@ const char GeckoAppShell::name[] = constexpr char GeckoAppShell::CancelVibrate_t::name[]; constexpr char GeckoAppShell::CancelVibrate_t::signature[]; auto GeckoAppShell::CancelVibrate() -> void { return mozilla::jni::Method<CancelVibrate_t>::Call(GeckoAppShell::Context(), nullptr); } -constexpr char GeckoAppShell::CheckURIVisited_t::name[]; -constexpr char GeckoAppShell::CheckURIVisited_t::signature[]; - -auto GeckoAppShell::CheckURIVisited(mozilla::jni::String::Param a0) -> void -{ - return mozilla::jni::Method<CheckURIVisited_t>::Call(GeckoAppShell::Context(), nullptr, a0); -} - constexpr char GeckoAppShell::CloseCamera_t::name[]; constexpr char GeckoAppShell::CloseCamera_t::signature[]; auto GeckoAppShell::CloseCamera() -> void { return mozilla::jni::Method<CloseCamera_t>::Call(GeckoAppShell::Context(), nullptr); } @@ -492,24 +484,16 @@ auto GeckoAppShell::LoadPluginClass(mozi constexpr char GeckoAppShell::LockScreenOrientation_t::name[]; constexpr char GeckoAppShell::LockScreenOrientation_t::signature[]; auto GeckoAppShell::LockScreenOrientation(int32_t a0) -> void { return mozilla::jni::Method<LockScreenOrientation_t>::Call(GeckoAppShell::Context(), nullptr, a0); } -constexpr char GeckoAppShell::MarkURIVisited_t::name[]; -constexpr char GeckoAppShell::MarkURIVisited_t::signature[]; - -auto GeckoAppShell::MarkURIVisited(mozilla::jni::String::Param a0) -> void -{ - return mozilla::jni::Method<MarkURIVisited_t>::Call(GeckoAppShell::Context(), nullptr, a0); -} - constexpr char GeckoAppShell::MoveTaskToBack_t::name[]; constexpr char GeckoAppShell::MoveTaskToBack_t::signature[]; auto GeckoAppShell::MoveTaskToBack() -> void { return mozilla::jni::Method<MoveTaskToBack_t>::Call(GeckoAppShell::Context(), nullptr); } @@ -558,24 +542,16 @@ constexpr char GeckoAppShell::ReportJava constexpr char GeckoAppShell::SetScreenDepthOverride_t::name[]; constexpr char GeckoAppShell::SetScreenDepthOverride_t::signature[]; auto GeckoAppShell::SetScreenDepthOverride(int32_t a0) -> void { return mozilla::jni::Method<SetScreenDepthOverride_t>::Call(GeckoAppShell::Context(), nullptr, a0); } -constexpr char GeckoAppShell::SetURITitle_t::name[]; -constexpr char GeckoAppShell::SetURITitle_t::signature[]; - -auto GeckoAppShell::SetURITitle(mozilla::jni::String::Param a0, mozilla::jni::String::Param a1) -> void -{ - return mozilla::jni::Method<SetURITitle_t>::Call(GeckoAppShell::Context(), nullptr, a0, a1); -} - constexpr char GeckoAppShell::ShowNotification_t::name[]; constexpr char GeckoAppShell::ShowNotification_t::signature[]; auto GeckoAppShell::ShowNotification(mozilla::jni::String::Param a0, mozilla::jni::String::Param a1, mozilla::jni::String::Param a2, mozilla::jni::String::Param a3, mozilla::jni::String::Param a4, mozilla::jni::String::Param a5, mozilla::jni::String::Param a6) -> void { return mozilla::jni::Method<ShowNotification_t>::Call(GeckoAppShell::Context(), nullptr, a0, a1, a2, a3, a4, a5, a6); }
--- a/widget/android/GeneratedJNIWrappers.h +++ b/widget/android/GeneratedJNIWrappers.h @@ -389,36 +389,16 @@ public: static const mozilla::jni::CallingThread callingThread = mozilla::jni::CallingThread::GECKO; static const mozilla::jni::DispatchTarget dispatchTarget = mozilla::jni::DispatchTarget::CURRENT; }; static auto CancelVibrate() -> void; - struct CheckURIVisited_t { - typedef GeckoAppShell Owner; - typedef void ReturnType; - typedef void SetterType; - typedef mozilla::jni::Args< - mozilla::jni::String::Param> Args; - static constexpr char name[] = "checkUriVisited"; - static constexpr char signature[] = - "(Ljava/lang/String;)V"; - static const bool isStatic = true; - static const mozilla::jni::ExceptionMode exceptionMode = - mozilla::jni::ExceptionMode::ABORT; - static const mozilla::jni::CallingThread callingThread = - mozilla::jni::CallingThread::GECKO; - static const mozilla::jni::DispatchTarget dispatchTarget = - mozilla::jni::DispatchTarget::CURRENT; - }; - - static auto CheckURIVisited(mozilla::jni::String::Param) -> void; - struct CloseCamera_t { typedef GeckoAppShell Owner; typedef void ReturnType; typedef void SetterType; typedef mozilla::jni::Args<> Args; static constexpr char name[] = "closeCamera"; static constexpr char signature[] = "()V"; @@ -1331,36 +1311,16 @@ public: static const mozilla::jni::CallingThread callingThread = mozilla::jni::CallingThread::GECKO; static const mozilla::jni::DispatchTarget dispatchTarget = mozilla::jni::DispatchTarget::CURRENT; }; static auto LockScreenOrientation(int32_t) -> void; - struct MarkURIVisited_t { - typedef GeckoAppShell Owner; - typedef void ReturnType; - typedef void SetterType; - typedef mozilla::jni::Args< - mozilla::jni::String::Param> Args; - static constexpr char name[] = "markUriVisited"; - static constexpr char signature[] = - "(Ljava/lang/String;)V"; - static const bool isStatic = true; - static const mozilla::jni::ExceptionMode exceptionMode = - mozilla::jni::ExceptionMode::ABORT; - static const mozilla::jni::CallingThread callingThread = - mozilla::jni::CallingThread::GECKO; - static const mozilla::jni::DispatchTarget dispatchTarget = - mozilla::jni::DispatchTarget::CURRENT; - }; - - static auto MarkURIVisited(mozilla::jni::String::Param) -> void; - struct MoveTaskToBack_t { typedef GeckoAppShell Owner; typedef void ReturnType; typedef void SetterType; typedef mozilla::jni::Args<> Args; static constexpr char name[] = "moveTaskToBack"; static constexpr char signature[] = "()V"; @@ -1580,37 +1540,16 @@ public: static const mozilla::jni::CallingThread callingThread = mozilla::jni::CallingThread::GECKO; static const mozilla::jni::DispatchTarget dispatchTarget = mozilla::jni::DispatchTarget::CURRENT; }; static auto SetScreenDepthOverride(int32_t) -> void; - struct SetURITitle_t { - typedef GeckoAppShell Owner; - typedef void ReturnType; - typedef void SetterType; - typedef mozilla::jni::Args< - mozilla::jni::String::Param, - mozilla::jni::String::Param> Args; - static constexpr char name[] = "setUriTitle"; - static constexpr char signature[] = - "(Ljava/lang/String;Ljava/lang/String;)V"; - static const bool isStatic = true; - static const mozilla::jni::ExceptionMode exceptionMode = - mozilla::jni::ExceptionMode::ABORT; - static const mozilla::jni::CallingThread callingThread = - mozilla::jni::CallingThread::GECKO; - static const mozilla::jni::DispatchTarget dispatchTarget = - mozilla::jni::DispatchTarget::CURRENT; - }; - - static auto SetURITitle(mozilla::jni::String::Param, mozilla::jni::String::Param) -> void; - struct ShowNotification_t { typedef GeckoAppShell Owner; typedef void ReturnType; typedef void SetterType; typedef mozilla::jni::Args< mozilla::jni::String::Param, mozilla::jni::String::Param, mozilla::jni::String::Param,
--- a/widget/android/fennec/FennecJNIWrappers.cpp +++ b/widget/android/fennec/FennecJNIWrappers.cpp @@ -139,16 +139,43 @@ auto GeckoJavaSampler::Stop() -> void constexpr char GeckoJavaSampler::Unpause_t::name[]; constexpr char GeckoJavaSampler::Unpause_t::signature[]; auto GeckoJavaSampler::Unpause() -> void { return mozilla::jni::Method<Unpause_t>::Call(GeckoJavaSampler::Context(), nullptr); } +const char GlobalHistory::name[] = + "org/mozilla/gecko/GlobalHistory"; + +constexpr char GlobalHistory::CheckURIVisited_t::name[]; +constexpr char GlobalHistory::CheckURIVisited_t::signature[]; + +auto GlobalHistory::CheckURIVisited(mozilla::jni::String::Param a0) -> void +{ + return mozilla::jni::Method<CheckURIVisited_t>::Call(GlobalHistory::Context(), nullptr, a0); +} + +constexpr char GlobalHistory::MarkURIVisited_t::name[]; +constexpr char GlobalHistory::MarkURIVisited_t::signature[]; + +auto GlobalHistory::MarkURIVisited(mozilla::jni::String::Param a0) -> void +{ + return mozilla::jni::Method<MarkURIVisited_t>::Call(GlobalHistory::Context(), nullptr, a0); +} + +constexpr char GlobalHistory::SetURITitle_t::name[]; +constexpr char GlobalHistory::SetURITitle_t::signature[]; + +auto GlobalHistory::SetURITitle(mozilla::jni::String::Param a0, mozilla::jni::String::Param a1) -> void +{ + return mozilla::jni::Method<SetURITitle_t>::Call(GlobalHistory::Context(), nullptr, a0, a1); +} + const char MemoryMonitor::name[] = "org/mozilla/gecko/MemoryMonitor"; constexpr char MemoryMonitor::DispatchMemoryPressure_t::name[]; constexpr char MemoryMonitor::DispatchMemoryPressure_t::signature[]; const char PresentationMediaPlayerManager::name[] = "org/mozilla/gecko/PresentationMediaPlayerManager";
--- a/widget/android/fennec/FennecJNIWrappers.h +++ b/widget/android/fennec/FennecJNIWrappers.h @@ -418,16 +418,89 @@ public: static auto Unpause() -> void; static const mozilla::jni::CallingThread callingThread = mozilla::jni::CallingThread::ANY; template<class Impl> class Natives; }; +class GlobalHistory : public mozilla::jni::ObjectBase<GlobalHistory> +{ +public: + static const char name[]; + + explicit GlobalHistory(const Context& ctx) : ObjectBase<GlobalHistory>(ctx) {} + + struct CheckURIVisited_t { + typedef GlobalHistory Owner; + typedef void ReturnType; + typedef void SetterType; + typedef mozilla::jni::Args< + mozilla::jni::String::Param> Args; + static constexpr char name[] = "checkUriVisited"; + static constexpr char signature[] = + "(Ljava/lang/String;)V"; + static const bool isStatic = true; + static const mozilla::jni::ExceptionMode exceptionMode = + mozilla::jni::ExceptionMode::ABORT; + static const mozilla::jni::CallingThread callingThread = + mozilla::jni::CallingThread::GECKO; + static const mozilla::jni::DispatchTarget dispatchTarget = + mozilla::jni::DispatchTarget::CURRENT; + }; + + static auto CheckURIVisited(mozilla::jni::String::Param) -> void; + + struct MarkURIVisited_t { + typedef GlobalHistory Owner; + typedef void ReturnType; + typedef void SetterType; + typedef mozilla::jni::Args< + mozilla::jni::String::Param> Args; + static constexpr char name[] = "markUriVisited"; + static constexpr char signature[] = + "(Ljava/lang/String;)V"; + static const bool isStatic = true; + static const mozilla::jni::ExceptionMode exceptionMode = + mozilla::jni::ExceptionMode::ABORT; + static const mozilla::jni::CallingThread callingThread = + mozilla::jni::CallingThread::GECKO; + static const mozilla::jni::DispatchTarget dispatchTarget = + mozilla::jni::DispatchTarget::CURRENT; + }; + + static auto MarkURIVisited(mozilla::jni::String::Param) -> void; + + struct SetURITitle_t { + typedef GlobalHistory Owner; + typedef void ReturnType; + typedef void SetterType; + typedef mozilla::jni::Args< + mozilla::jni::String::Param, + mozilla::jni::String::Param> Args; + static constexpr char name[] = "setUriTitle"; + static constexpr char signature[] = + "(Ljava/lang/String;Ljava/lang/String;)V"; + static const bool isStatic = true; + static const mozilla::jni::ExceptionMode exceptionMode = + mozilla::jni::ExceptionMode::ABORT; + static const mozilla::jni::CallingThread callingThread = + mozilla::jni::CallingThread::GECKO; + static const mozilla::jni::DispatchTarget dispatchTarget = + mozilla::jni::DispatchTarget::CURRENT; + }; + + static auto SetURITitle(mozilla::jni::String::Param, mozilla::jni::String::Param) -> void; + + static const mozilla::jni::CallingThread callingThread = + mozilla::jni::CallingThread::GECKO; + +}; + class MemoryMonitor : public mozilla::jni::ObjectBase<MemoryMonitor> { public: static const char name[]; explicit MemoryMonitor(const Context& ctx) : ObjectBase<MemoryMonitor>(ctx) {} struct DispatchMemoryPressure_t {