Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: chrome/browser/android/offline_pages/evaluation/offline_page_evaluation_bridge.cc

Issue 2378803003: [Offline Pages] Added OfflinePageEvaluationBridge for testing. (Closed)
Patch Set: Fixing build. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/android/offline_pages/evaluation/offline_page_evaluatio n_bridge.h"
6
7 #include "base/android/callback_android.h"
8 #include "base/android/jni_android.h"
9 #include "base/android/jni_string.h"
10 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h"
11 #include "chrome/browser/android/offline_pages/request_coordinator_factory.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/profiles/profile_android.h"
14 #include "components/offline_pages/background/request_coordinator.h"
15 #include "components/offline_pages/background/request_notifier.h"
16 #include "components/offline_pages/background/save_page_request.h"
17 #include "components/offline_pages/offline_page_item.h"
18 #include "components/offline_pages/offline_page_model.h"
19 #include "content/public/browser/browser_context.h"
20 #include "jni/OfflinePageEvaluationBridge_jni.h"
21 #include "jni/SavePageRequest_jni.h"
22
23 using base::android::ConvertJavaStringToUTF8;
24 using base::android::ConvertUTF8ToJavaString;
25 using base::android::JavaParamRef;
26 using base::android::ScopedJavaGlobalRef;
27 using base::android::ScopedJavaLocalRef;
28
29 namespace offline_pages {
30 namespace android {
31
32 namespace {
33
34 void ToJavaOfflinePageList(JNIEnv* env,
35 jobject j_result_obj,
36 const std::vector<OfflinePageItem>& offline_pages) {
37 for (const OfflinePageItem& offline_page : offline_pages) {
38 Java_OfflinePageEvaluationBridge_createOfflinePageAndAddToList(
39 env, j_result_obj,
40 ConvertUTF8ToJavaString(env, offline_page.url.spec()),
41 offline_page.offline_id,
42 ConvertUTF8ToJavaString(env, offline_page.client_id.name_space),
43 ConvertUTF8ToJavaString(env, offline_page.client_id.id),
44 ConvertUTF8ToJavaString(env, offline_page.file_path.value()),
45 offline_page.file_size, offline_page.creation_time.ToJavaTime(),
46 offline_page.access_count, offline_page.last_access_time.ToJavaTime());
47 }
48 }
49
50 ScopedJavaLocalRef<jobject> ToJavaSavePageRequest(
51 JNIEnv* env,
52 const SavePageRequest& request) {
53 return Java_SavePageRequest_create(
54 env, static_cast<int>(request.request_state()), request.request_id(),
55 ConvertUTF8ToJavaString(env, request.url().spec()),
56 ConvertUTF8ToJavaString(env, request.client_id().name_space),
57 ConvertUTF8ToJavaString(env, request.client_id().id));
58 }
59
60 void GetAllPagesCallback(
61 const ScopedJavaGlobalRef<jobject>& j_result_obj,
62 const ScopedJavaGlobalRef<jobject>& j_callback_obj,
63 const OfflinePageModel::MultipleOfflinePageItemResult& result) {
64 JNIEnv* env = base::android::AttachCurrentThread();
65 ToJavaOfflinePageList(env, j_result_obj.obj(), result);
66 base::android::RunCallbackAndroid(j_callback_obj, j_result_obj);
67 }
68
69 void OnPushRequestsDone(const ScopedJavaGlobalRef<jobject>& j_callback_obj,
70 bool result) {
71 base::android::RunCallbackAndroid(j_callback_obj, result);
72 }
73
74 } // namespace
75
76 static ScopedJavaLocalRef<jobject> GetBridgeForProfile(
77 JNIEnv* env,
78 const JavaParamRef<jclass>& jcaller,
79 const JavaParamRef<jobject>& j_profile) {
80 Profile* profile = ProfileAndroid::FromProfileAndroid(j_profile);
81
82 OfflinePageModel* offline_page_model =
83 OfflinePageModelFactory::GetForBrowserContext(profile);
84
85 RequestCoordinator* request_coordinator =
86 RequestCoordinatorFactory::GetForBrowserContext(profile);
87
88 if (offline_page_model == nullptr || request_coordinator == nullptr)
89 return ScopedJavaLocalRef<jobject>();
90
91 OfflinePageEvaluationBridge* bridge = new OfflinePageEvaluationBridge(
92 env, profile, offline_page_model, request_coordinator);
93
94 return ScopedJavaLocalRef<jobject>(bridge->java_ref());
95 }
96
97 // static
98 bool OfflinePageEvaluationBridge::Register(JNIEnv* env) {
99 return RegisterNativesImpl(env);
100 }
101
102 OfflinePageEvaluationBridge::OfflinePageEvaluationBridge(
103 JNIEnv* env,
104 content::BrowserContext* browser_context,
105 OfflinePageModel* offline_page_model,
106 RequestCoordinator* request_coordinator)
107 : browser_context_(browser_context),
108 offline_page_model_(offline_page_model),
109 request_coordinator_(request_coordinator) {
110 java_ref_.Reset(Java_OfflinePageEvaluationBridge_create(
111 env, reinterpret_cast<jlong>(this)));
112
113 NotifyIfDoneLoading();
114 offline_page_model_->AddObserver(this);
115 request_coordinator_->AddObserver(this);
116 }
117
118 OfflinePageEvaluationBridge::~OfflinePageEvaluationBridge() {
119 JNIEnv* env = base::android::AttachCurrentThread();
120 Java_OfflinePageEvaluationBridge_offlinePageEvaluationBridgeDestroyed(
121 env, java_ref_);
122 }
123
124 // Implement OfflinePageModel::Observer
125 void OfflinePageEvaluationBridge::OfflinePageModelLoaded(
126 OfflinePageModel* model) {
127 DCHECK_EQ(offline_page_model_, model);
128 NotifyIfDoneLoading();
129 }
130
131 void OfflinePageEvaluationBridge::OfflinePageModelChanged(
132 OfflinePageModel* model) {}
133
134 void OfflinePageEvaluationBridge::OfflinePageDeleted(
135 int64_t offline_id,
136 const ClientId& client_id) {}
137
138 // Implement RequestCoordinator::Observer
139 void OfflinePageEvaluationBridge::OnAdded(const SavePageRequest& request) {
140 JNIEnv* env = base::android::AttachCurrentThread();
141 Java_OfflinePageEvaluationBridge_savePageRequestAdded(
142 env, java_ref_, ToJavaSavePageRequest(env, request));
143 }
144
145 void OfflinePageEvaluationBridge::OnCompleted(
146 const SavePageRequest& request,
147 RequestNotifier::BackgroundSavePageResult status) {
148 JNIEnv* env = base::android::AttachCurrentThread();
149 Java_OfflinePageEvaluationBridge_savePageRequestCompleted(
150 env, java_ref_, ToJavaSavePageRequest(env, request),
151 static_cast<int>(status));
152 }
153
154 void OfflinePageEvaluationBridge::OnChanged(const SavePageRequest& request) {
155 JNIEnv* env = base::android::AttachCurrentThread();
156 Java_OfflinePageEvaluationBridge_savePageRequestChanged(
157 env, java_ref_, ToJavaSavePageRequest(env, request));
158 }
159
160 void OfflinePageEvaluationBridge::GetAllPages(
161 JNIEnv* env,
162 const JavaParamRef<jobject>& obj,
163 const JavaParamRef<jobject>& j_result_obj,
164 const JavaParamRef<jobject>& j_callback_obj) {
165 DCHECK(j_result_obj);
166 DCHECK(j_callback_obj);
167
168 ScopedJavaGlobalRef<jobject> j_result_ref(j_result_obj);
169 ScopedJavaGlobalRef<jobject> j_callback_ref(j_callback_obj);
170
171 offline_page_model_->GetAllPages(
172 base::Bind(&GetAllPagesCallback, j_result_ref, j_callback_ref));
173 }
174
175 void OfflinePageEvaluationBridge::PushRequestProcessing(
176 JNIEnv* env,
177 const JavaParamRef<jobject>& obj,
178 const JavaParamRef<jobject>& j_callback_obj) {
179 ScopedJavaGlobalRef<jobject> j_callback_ref(j_callback_obj);
180 DCHECK(request_coordinator_);
181 base::android::RunCallbackAndroid(j_callback_obj, false);
182
183 net::NetworkChangeNotifier::ConnectionType connection =
184 net::NetworkChangeNotifier::GetConnectionType();
185 DeviceConditions device_conditions(false, 0, connection);
186 request_coordinator_->StartProcessing(
187 device_conditions, base::Bind(&OnPushRequestsDone, j_callback_ref));
188 }
189
190 void OfflinePageEvaluationBridge::SavePageLater(
191 JNIEnv* env,
192 const JavaParamRef<jobject>& obj,
193 const JavaParamRef<jstring>& j_url,
194 const JavaParamRef<jstring>& j_namespace,
195 const JavaParamRef<jstring>& j_client_id,
196 jboolean user_requested) {
197 offline_pages::ClientId client_id;
198 client_id.name_space = ConvertJavaStringToUTF8(env, j_namespace);
199 client_id.id = ConvertJavaStringToUTF8(env, j_client_id);
200
201 request_coordinator_->SavePageLater(
202 GURL(ConvertJavaStringToUTF8(env, j_url)), client_id,
203 static_cast<bool>(user_requested),
204 RequestCoordinator::RequestAvailability::ENABLED_FOR_OFFLINER);
205 }
206
207 void OfflinePageEvaluationBridge::NotifyIfDoneLoading() const {
208 if (!offline_page_model_->is_loaded())
209 return;
210 JNIEnv* env = base::android::AttachCurrentThread();
211 Java_OfflinePageEvaluationBridge_offlinePageModelLoaded(env, java_ref_);
212 }
213
214 } // namespace android
215 } // namespace offline_pages
OLDNEW
« no previous file with comments | « chrome/browser/android/offline_pages/evaluation/offline_page_evaluation_bridge.h ('k') | components/offline_pages/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698