summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfgorski <fgorski@chromium.org>2015-07-17 19:10:07 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-18 02:10:53 +0000
commitfd0f0755afb906cc43542b44895a03a854633745 (patch)
tree65a64e1112a54c99cad2a614cbf4fb88b2c43930
parentd0a1097980ef64232357be8443f2987643cf40cb (diff)
downloadchromium_src-fd0f0755afb906cc43542b44895a03a854633745.zip
chromium_src-fd0f0755afb906cc43542b44895a03a854633745.tar.gz
chromium_src-fd0f0755afb906cc43542b44895a03a854633745.tar.bz2
[Offline Pages] Stub of offline pages bridge
BUG=491352 R=nyquist@chromium.org Review URL: https://codereview.chromium.org/1232843003 Cr-Commit-Position: refs/heads/master@{#339379}
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/offline_pages/OfflinePageBridge.java37
-rw-r--r--chrome/browser/android/chrome_jni_registrar.cc3
-rw-r--r--chrome/browser/android/offline_pages/offline_page_bridge.cc40
-rw-r--r--chrome/browser/android/offline_pages/offline_page_bridge.h48
-rw-r--r--chrome/chrome_browser.gypi3
5 files changed, 131 insertions, 0 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offline_pages/OfflinePageBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/offline_pages/OfflinePageBridge.java
new file mode 100644
index 0000000..d4c6640
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offline_pages/OfflinePageBridge.java
@@ -0,0 +1,37 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.offline_pages;
+
+import org.chromium.base.JNINamespace;
+import org.chromium.chrome.browser.profiles.Profile;
+
+/**
+ * Access gate to C++ side offline pages functionalities.
+ */
+@JNINamespace("offline_pages::android")
+public final class OfflinePageBridge {
+
+ private long mNativeOfflinePageBridge;
+
+ /**
+ * Creates offline pages bridge for a given profile.
+ */
+ public OfflinePageBridge(Profile profile) {
+ mNativeOfflinePageBridge = nativeInit(profile);
+ }
+
+ /**
+ * Destroys native offline pages bridge. It should be called during
+ * destruction to ensure proper cleanup.
+ */
+ public void destroy() {
+ assert mNativeOfflinePageBridge != 0;
+ nativeDestroy(mNativeOfflinePageBridge);
+ mNativeOfflinePageBridge = 0;
+ }
+
+ private native long nativeInit(Profile profile);
+ private native void nativeDestroy(long nativeOfflinePageBridge);
+}
diff --git a/chrome/browser/android/chrome_jni_registrar.cc b/chrome/browser/android/chrome_jni_registrar.cc
index 44de8f2..1297919 100644
--- a/chrome/browser/android/chrome_jni_registrar.cc
+++ b/chrome/browser/android/chrome_jni_registrar.cc
@@ -51,6 +51,7 @@
#include "chrome/browser/android/metrics/variations_session.h"
#include "chrome/browser/android/most_visited_sites.h"
#include "chrome/browser/android/new_tab_page_prefs.h"
+#include "chrome/browser/android/offline_pages/offline_page_bridge.h"
#include "chrome/browser/android/omnibox/answers_image_bridge.h"
#include "chrome/browser/android/omnibox/autocomplete_controller_android.h"
#include "chrome/browser/android/omnibox/omnibox_prerender.h"
@@ -256,6 +257,8 @@ static base::android::RegistrationMethod kChromeRegisteredMethods[] = {
NotificationUIManagerAndroid::RegisterNotificationUIManager},
{"OAuth2TokenServiceDelegateAndroid",
OAuth2TokenServiceDelegateAndroid::Register},
+ {"OfflinePageBridge",
+ offline_pages::android::RegisterOfflinePageBridge},
{"OmniboxPrerender", RegisterOmniboxPrerender},
{"OmniboxUrlEmphasizer",
OmniboxUrlEmphasizer::RegisterOmniboxUrlEmphasizer},
diff --git a/chrome/browser/android/offline_pages/offline_page_bridge.cc b/chrome/browser/android/offline_pages/offline_page_bridge.cc
new file mode 100644
index 0000000..b40611e
--- /dev/null
+++ b/chrome/browser/android/offline_pages/offline_page_bridge.cc
@@ -0,0 +1,40 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/android/offline_pages/offline_page_bridge.h"
+
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_android.h"
+#include "components/offline_pages/offline_page_model.h"
+#include "content/public/browser/browser_context.h"
+#include "jni/OfflinePageBridge_jni.h"
+
+namespace offline_pages {
+namespace android {
+
+OfflinePageBridge::OfflinePageBridge(JNIEnv* env,
+ jobject obj,
+ content::BrowserContext* browser_context)
+ : weak_java_ref_(env, obj),
+ offline_page_model_(nullptr),
+ browser_context_(browser_context) {
+ // TODO(fgorski): Pull offline pages model from the factory once it is
+ // available.
+}
+
+void OfflinePageBridge::Destroy(JNIEnv*, jobject) {
+ delete this;
+}
+
+static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) {
+ return reinterpret_cast<jlong>(new OfflinePageBridge(
+ env, obj, ProfileAndroid::FromProfileAndroid(j_profile)));
+}
+
+bool RegisterOfflinePageBridge(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+
+} // namespace android
+} // namespace offline_pages
diff --git a/chrome/browser/android/offline_pages/offline_page_bridge.h b/chrome/browser/android/offline_pages/offline_page_bridge.h
new file mode 100644
index 0000000..ea61576
--- /dev/null
+++ b/chrome/browser/android/offline_pages/offline_page_bridge.h
@@ -0,0 +1,48 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ANDROID_OFFLINE_PAGES_OFFLINE_PAGE_BRIDGE_H_
+#define CHROME_BROWSER_ANDROID_OFFLINE_PAGES_OFFLINE_PAGE_BRIDGE_H_
+
+#include "base/android/jni_android.h"
+#include "base/android/jni_weak_ref.h"
+
+namespace content {
+class BrowserContext;
+}
+
+namespace offline_pages {
+
+class OfflinePageModel;
+
+namespace android {
+
+/**
+ * Bridge between C++ and Java for exposing native implementation of offline
+ * pages model in managed code.
+ */
+class OfflinePageBridge {
+ public:
+ OfflinePageBridge(JNIEnv* env,
+ jobject obj,
+ content::BrowserContext* browser_context);
+ void Destroy(JNIEnv*, jobject);
+
+ private:
+
+ JavaObjectWeakGlobalRef weak_java_ref_;
+ // Not owned.
+ OfflinePageModel* offline_page_model_;
+ // Not owned.
+ content::BrowserContext* browser_context_;
+ DISALLOW_COPY_AND_ASSIGN(OfflinePageBridge);
+};
+
+bool RegisterOfflinePageBridge(JNIEnv* env);
+
+} // namespace android
+} // namespace offline_pages
+
+#endif // CHROME_BROWSER_ANDROID_OFFLINE_PAGES_OFFLINE_PAGE_BRIDGE_H_
+
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 97fdae4..3517cdd4 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1362,6 +1362,8 @@
'browser/offline_pages/offline_page_metadata_store_impl.h',
],
'chrome_browser_bookmark_android_sources': [
+ 'browser/android/offline_pages/offline_page_bridge.cc',
+ 'browser/android/offline_pages/offline_page_bridge.h',
'browser/android/offline_pages/offline_page_mhtml_archiver.cc',
'browser/android/offline_pages/offline_page_mhtml_archiver.h',
'browser/enhanced_bookmarks/android/enhanced_bookmarks_bridge.cc',
@@ -1759,6 +1761,7 @@
'android/java/src/org/chromium/chrome/browser/infobar/DownloadOverwriteInfoBar.java',
'android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java',
'android/java/src/org/chromium/chrome/browser/notifications/NotificationUIManager.java',
+ 'android/java/src/org/chromium/chrome/browser/offline_pages/OfflinePageBridge.java',
'android/java/src/org/chromium/chrome/browser/omnibox/AnswersImage.java',
'android/java/src/org/chromium/chrome/browser/omnibox/AutocompleteController.java',
'android/java/src/org/chromium/chrome/browser/omnibox/OmniboxPrerender.java',