diff options
author | fgorski <fgorski@chromium.org> | 2015-07-17 19:10:07 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-18 02:10:53 +0000 |
commit | fd0f0755afb906cc43542b44895a03a854633745 (patch) | |
tree | 65a64e1112a54c99cad2a614cbf4fb88b2c43930 | |
parent | d0a1097980ef64232357be8443f2987643cf40cb (diff) | |
download | chromium_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}
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', |