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

Side by Side Diff: content/browser/frame_host/navigation_controller_android.cc

Issue 406023002: Restructuring NavigationController functionalities from ContentViewCore to NavigationController (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed review comments. Created 6 years, 5 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
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/frame_host/navigation_controller_android.h" 5 #include "content/browser/frame_host/navigation_controller_android.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "content/public/browser/navigation_controller.h" 8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h"
10 #include "content/browser/frame_host/navigation_entry_impl.h"
11 #include "content/browser/ssl/ssl_host_state.h"
9 #include "jni/NavigationControllerImpl_jni.h" 12 #include "jni/NavigationControllerImpl_jni.h"
13 #include "ui/gfx/android/java_bitmap.h"
10 14
11 using base::android::AttachCurrentThread; 15 using base::android::AttachCurrentThread;
16 using base::android::ConvertJavaStringToUTF16;
17 using base::android::ConvertJavaStringToUTF8;
18 using base::android::ConvertUTF16ToJavaString;
19 using base::android::ConvertUTF8ToJavaString;
12 20
13 namespace content { 21 namespace content {
14 22
15 // static 23 // static
24 static void AddNavigationEntryToHistory(
Yaron 2014/07/23 18:58:38 this should still be in an anonymous namespace, ju
AKVT 2014/07/24 07:47:24 Done.
25 JNIEnv* env,
26 jobject obj,
27 jobject history,
28 NavigationEntry* entry,
29 int index) {
30 // Get the details of the current entry
31 ScopedJavaLocalRef<jstring> j_url(
32 ConvertUTF8ToJavaString(env, entry->GetURL().spec()));
33 ScopedJavaLocalRef<jstring> j_virtual_url(
34 ConvertUTF8ToJavaString(env, entry->GetVirtualURL().spec()));
35 ScopedJavaLocalRef<jstring> j_original_url(
36 ConvertUTF8ToJavaString(env, entry->GetOriginalRequestURL().spec()));
37 ScopedJavaLocalRef<jstring> j_title(
38 ConvertUTF16ToJavaString(env, entry->GetTitle()));
39 ScopedJavaLocalRef<jobject> j_bitmap;
40 const FaviconStatus& status = entry->GetFavicon();
41 if (status.valid && status.image.ToSkBitmap()->getSize() > 0)
42 j_bitmap = gfx::ConvertToJavaBitmap(status.image.ToSkBitmap());
43
44 // Add the item to the list
45 Java_NavigationControllerImpl_addToNavigationHistory(
46 env, obj, history, index, j_url.obj(), j_virtual_url.obj(),
47 j_original_url.obj(), j_title.obj(), j_bitmap.obj());
48 }
49
50 // static
16 bool NavigationControllerAndroid::Register(JNIEnv* env) { 51 bool NavigationControllerAndroid::Register(JNIEnv* env) {
17 return RegisterNativesImpl(env); 52 return RegisterNativesImpl(env);
18 } 53 }
19 54
20 NavigationControllerAndroid::NavigationControllerAndroid( 55 NavigationControllerAndroid::NavigationControllerAndroid(
21 NavigationController* navigation_controller) 56 NavigationController* navigation_controller)
22 : navigation_controller_(navigation_controller) { 57 : navigation_controller_(navigation_controller) {
23 JNIEnv* env = AttachCurrentThread(); 58 JNIEnv* env = AttachCurrentThread();
24 obj_.Reset(env, 59 obj_.Reset(env,
25 Java_NavigationControllerImpl_create( 60 Java_NavigationControllerImpl_create(
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 jobject obj) { 129 jobject obj) {
95 navigation_controller_->CancelPendingReload(); 130 navigation_controller_->CancelPendingReload();
96 } 131 }
97 132
98 void NavigationControllerAndroid::GoToNavigationIndex(JNIEnv* env, 133 void NavigationControllerAndroid::GoToNavigationIndex(JNIEnv* env,
99 jobject obj, 134 jobject obj,
100 jint index) { 135 jint index) {
101 navigation_controller_->GoToIndex(index); 136 navigation_controller_->GoToIndex(index);
102 } 137 }
103 138
139 void NavigationControllerAndroid::LoadUrl(
140 JNIEnv* env, jobject obj,
141 jstring url,
142 jint load_url_type,
143 jint transition_type,
144 jstring j_referrer_url,
145 jint referrer_policy,
146 jint ua_override_option,
147 jstring extra_headers,
148 jbyteArray post_data,
149 jstring base_url_for_data_url,
150 jstring virtual_url_for_data_url,
151 jboolean can_load_local_resources,
152 jboolean is_renderer_initiated) {
153 DCHECK(url);
154 NavigationController::LoadURLParams params(
155 GURL(ConvertJavaStringToUTF8(env, url)));
156
157 params.load_type = static_cast<NavigationController::LoadURLType>(
158 load_url_type);
159 params.transition_type = PageTransitionFromInt(transition_type);
160 params.override_user_agent =
161 static_cast<NavigationController::UserAgentOverrideOption>(
162 ua_override_option);
163
164 if (extra_headers)
165 params.extra_headers = ConvertJavaStringToUTF8(env, extra_headers);
166
167 if (post_data) {
168 std::vector<uint8> http_body_vector;
169 base::android::JavaByteArrayToByteVector(env, post_data, &http_body_vector);
170 params.browser_initiated_post_data =
171 base::RefCountedBytes::TakeVector(&http_body_vector);
172 }
173
174 if (base_url_for_data_url) {
175 params.base_url_for_data_url =
176 GURL(ConvertJavaStringToUTF8(env, base_url_for_data_url));
177 }
178
179 if (virtual_url_for_data_url) {
180 params.virtual_url_for_data_url =
181 GURL(ConvertJavaStringToUTF8(env, virtual_url_for_data_url));
182 }
183
184 params.can_load_local_resources = can_load_local_resources;
185 if (j_referrer_url) {
186 params.referrer = content::Referrer(
187 GURL(ConvertJavaStringToUTF8(env, j_referrer_url)),
188 static_cast<blink::WebReferrerPolicy>(referrer_policy));
189 }
190
191 params.is_renderer_initiated = is_renderer_initiated;
192
193 navigation_controller_->LoadURLWithParams(params);
194 }
195
196 void NavigationControllerAndroid::ClearHistory(JNIEnv* env, jobject obj) {
197 // TODO(creis): Do callers of this need to know if it fails?
198 if (navigation_controller_->CanPruneAllButLastCommitted())
199 navigation_controller_->PruneAllButLastCommitted();
200 }
201
202 jint NavigationControllerAndroid::GetNavigationHistory(
203 JNIEnv* env,
204 jobject obj,
205 jobject history) {
206 // Iterate through navigation entries to populate the list
207 int count = navigation_controller_->GetEntryCount();
208 for (int i = 0; i < count; ++i) {
209 AddNavigationEntryToHistory(
210 env, obj, history, navigation_controller_->GetEntryAtIndex(i), i);
211 }
212
213 return navigation_controller_->GetCurrentEntryIndex();
214 }
215
216 void NavigationControllerAndroid::GetDirectedNavigationHistory(
217 JNIEnv* env,
218 jobject obj,
219 jobject history,
220 jboolean is_forward,
221 jint max_entries) {
222 // Iterate through navigation entries to populate the list
223 int count = navigation_controller_->GetEntryCount();
224 int num_added = 0;
225 int increment_value = is_forward ? 1 : -1;
226 for (int i = navigation_controller_->GetCurrentEntryIndex() + increment_value;
227 i >= 0 && i < count;
228 i += increment_value) {
229 if (num_added >= max_entries)
230 break;
231
232 AddNavigationEntryToHistory(
233 env, obj, history, navigation_controller_->GetEntryAtIndex(i), i);
234 num_added++;
235 }
236 }
237
238 ScopedJavaLocalRef<jstring>
239 NavigationControllerAndroid::GetOriginalUrlForActiveNavigationEntry(
240 JNIEnv* env,
241 jobject obj) {
242 NavigationEntry* entry = navigation_controller_->GetVisibleEntry();
243 if (entry == NULL)
244 return ScopedJavaLocalRef<jstring>(env, NULL);
245 return ConvertUTF8ToJavaString(env, entry->GetOriginalRequestURL().spec());
246 }
247
248 void NavigationControllerAndroid::ClearSslPreferences(
249 JNIEnv* env,
250 jobject obj) {
251 SSLHostState* state = SSLHostState::GetFor(
252 navigation_controller_->GetBrowserContext());
253 state->Clear();
254 }
255
256 bool NavigationControllerAndroid::GetUseDesktopUserAgent(
257 JNIEnv* env,
258 jobject obj) {
259 NavigationEntry* entry = navigation_controller_->GetVisibleEntry();
260 return entry && entry->GetIsOverridingUserAgent();
261 }
262
263 void NavigationControllerAndroid::SetUseDesktopUserAgent(
264 JNIEnv* env,
265 jobject obj,
266 jboolean enabled,
267 jboolean reload_on_state_change) {
268 if (GetUseDesktopUserAgent(env, obj) == enabled)
269 return;
270
271 // Make sure the navigation entry actually exists.
272 NavigationEntry* entry = navigation_controller_->GetVisibleEntry();
273 if (!entry)
274 return;
275
276 // Set the flag in the NavigationEntry.
277 entry->SetIsOverridingUserAgent(enabled);
278
279 // Send the override to the renderer.
280 if (reload_on_state_change) {
281 // Reloading the page will send the override down as part of the
282 // navigation IPC message.
283 navigation_controller_->ReloadOriginalRequestURL(false);
284 }
285 }
286
104 } // namespace content 287 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698