// 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 #include "base/android/jni_android.h" #include "base/android/jni_weak_ref.h" #include "base/macros.h" #include "base/supports_user_data.h" #include "components/offline_pages/offline_page_item.h" #include "components/offline_pages/offline_page_model.h" namespace content { class BrowserContext; } namespace offline_pages { namespace android { /** * Bridge between C++ and Java for exposing native implementation of offline * pages model in managed code. */ class OfflinePageBridge : public OfflinePageModel::Observer, public base::SupportsUserData::Data { public: OfflinePageBridge(JNIEnv* env, content::BrowserContext* browser_context, OfflinePageModel* offline_page_model); ~OfflinePageBridge() override; // OfflinePageModel::Observer implementation. void OfflinePageModelLoaded(OfflinePageModel* model) override; void OfflinePageModelChanged(OfflinePageModel* model) override; void OfflinePageDeleted(int64_t offline_id, const ClientId& client_id) override; void GetAllPages(JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& j_result_obj); void GetPagesToCleanUp( JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& j_result_obj); base::android::ScopedJavaLocalRef GetOfflineIdsForClientId( JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& j_client_id_namespace, const base::android::JavaParamRef& j_client_id); base::android::ScopedJavaLocalRef GetPageByOfflineId( JNIEnv* env, const base::android::JavaParamRef& obj, jlong offline_id); base::android::ScopedJavaLocalRef GetPageByOnlineURL( JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& online_url); base::android::ScopedJavaLocalRef GetPageByOfflineUrl( JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& j_offline_url); void SavePage( JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& j_callback_obj, const base::android::JavaParamRef& j_web_contents, const base::android::JavaParamRef& j_client_id_namespace, const base::android::JavaParamRef& j_client_id); void MarkPageAccessed(JNIEnv* env, const base::android::JavaParamRef& obj, jlong offline_id); void DeletePage(JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& j_callback_obj, jlong offline_id); void DeletePages( JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& j_callback_obj, const base::android::JavaParamRef& j_offline_ids_array); void CheckMetadataConsistency( JNIEnv* env, const base::android::JavaParamRef& obj); base::android::ScopedJavaLocalRef GetOfflineUrlForOnlineUrl( JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& j_online_url); void RecordStorageHistograms(JNIEnv* env, const base::android::JavaParamRef& obj, jlong total_space_bytes, jlong free_space_bytes, jboolean reporting_after_delete); base::android::ScopedJavaGlobalRef java_ref() { return java_ref_; } private: void NotifyIfDoneLoading() const; base::android::ScopedJavaLocalRef CreateOfflinePageItem( JNIEnv* env, const OfflinePageItem& offline_page) const; base::android::ScopedJavaLocalRef CreateClientId( JNIEnv* env, const ClientId& clientId) const; base::android::ScopedJavaGlobalRef java_ref_; // Not owned. content::BrowserContext* browser_context_; // Not owned. OfflinePageModel* offline_page_model_; DISALLOW_COPY_AND_ASSIGN(OfflinePageBridge); }; bool RegisterOfflinePageBridge(JNIEnv* env); } // namespace android } // namespace offline_pages #endif // CHROME_BROWSER_ANDROID_OFFLINE_PAGES_OFFLINE_PAGE_BRIDGE_H_