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

Unified 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: Rebased the patch with findbugs_known_bugs.txt changes. Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/frame_host/navigation_controller_android.h ('k') | content/content.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/frame_host/navigation_controller_android.cc
diff --git a/content/browser/frame_host/navigation_controller_android.cc b/content/browser/frame_host/navigation_controller_android.cc
index 69f7bb1a177263bc4a98c2c18e26b825a5b7f7fa..4f3f45a684f393ae7777c948f04b77d3378ed0bc 100644
--- a/content/browser/frame_host/navigation_controller_android.cc
+++ b/content/browser/frame_host/navigation_controller_android.cc
@@ -5,10 +5,56 @@
#include "content/browser/frame_host/navigation_controller_android.h"
#include "base/android/jni_android.h"
+#include "base/android/jni_array.h"
+#include "base/android/jni_string.h"
+#include "content/browser/frame_host/navigation_entry_impl.h"
+#include "content/public/browser/browser_context.h"
#include "content/public/browser/navigation_controller.h"
+#include "content/public/browser/ssl_host_state_delegate.h"
#include "jni/NavigationControllerImpl_jni.h"
+#include "ui/gfx/android/java_bitmap.h"
using base::android::AttachCurrentThread;
+using base::android::ConvertJavaStringToUTF16;
+using base::android::ConvertJavaStringToUTF8;
+using base::android::ConvertUTF16ToJavaString;
+using base::android::ConvertUTF8ToJavaString;
+namespace {
+
+// static
+static void AddNavigationEntryToHistory(JNIEnv* env,
+ jobject obj,
+ jobject history,
+ content::NavigationEntry* entry,
+ int index) {
+ // Get the details of the current entry
+ ScopedJavaLocalRef<jstring> j_url(
+ ConvertUTF8ToJavaString(env, entry->GetURL().spec()));
+ ScopedJavaLocalRef<jstring> j_virtual_url(
+ ConvertUTF8ToJavaString(env, entry->GetVirtualURL().spec()));
+ ScopedJavaLocalRef<jstring> j_original_url(
+ ConvertUTF8ToJavaString(env, entry->GetOriginalRequestURL().spec()));
+ ScopedJavaLocalRef<jstring> j_title(
+ ConvertUTF16ToJavaString(env, entry->GetTitle()));
+ ScopedJavaLocalRef<jobject> j_bitmap;
+ const content::FaviconStatus& status = entry->GetFavicon();
+ if (status.valid && status.image.ToSkBitmap()->getSize() > 0)
+ j_bitmap = gfx::ConvertToJavaBitmap(status.image.ToSkBitmap());
+
+ // Add the item to the list
+ content::Java_NavigationControllerImpl_addToNavigationHistory(
+ env,
+ obj,
+ history,
+ index,
+ j_url.obj(),
+ j_virtual_url.obj(),
+ j_original_url.obj(),
+ j_title.obj(),
+ j_bitmap.obj());
+}
+
+} // namespace
namespace content {
@@ -101,4 +147,149 @@ void NavigationControllerAndroid::GoToNavigationIndex(JNIEnv* env,
navigation_controller_->GoToIndex(index);
}
+void NavigationControllerAndroid::LoadUrl(JNIEnv* env,
+ jobject obj,
+ jstring url,
+ jint load_url_type,
+ jint transition_type,
+ jstring j_referrer_url,
+ jint referrer_policy,
+ jint ua_override_option,
+ jstring extra_headers,
+ jbyteArray post_data,
+ jstring base_url_for_data_url,
+ jstring virtual_url_for_data_url,
+ jboolean can_load_local_resources,
+ jboolean is_renderer_initiated) {
+ DCHECK(url);
+ NavigationController::LoadURLParams params(
+ GURL(ConvertJavaStringToUTF8(env, url)));
+
+ params.load_type =
+ static_cast<NavigationController::LoadURLType>(load_url_type);
+ params.transition_type = PageTransitionFromInt(transition_type);
+ params.override_user_agent =
+ static_cast<NavigationController::UserAgentOverrideOption>(
+ ua_override_option);
+ params.can_load_local_resources = can_load_local_resources;
+ params.is_renderer_initiated = is_renderer_initiated;
+
+ if (extra_headers)
+ params.extra_headers = ConvertJavaStringToUTF8(env, extra_headers);
+
+ if (post_data) {
+ std::vector<uint8> http_body_vector;
+ base::android::JavaByteArrayToByteVector(env, post_data, &http_body_vector);
+ params.browser_initiated_post_data =
+ base::RefCountedBytes::TakeVector(&http_body_vector);
+ }
+
+ if (base_url_for_data_url) {
+ params.base_url_for_data_url =
+ GURL(ConvertJavaStringToUTF8(env, base_url_for_data_url));
+ }
+
+ if (virtual_url_for_data_url) {
+ params.virtual_url_for_data_url =
+ GURL(ConvertJavaStringToUTF8(env, virtual_url_for_data_url));
+ }
+
+ if (j_referrer_url) {
+ params.referrer = content::Referrer(
+ GURL(ConvertJavaStringToUTF8(env, j_referrer_url)),
+ static_cast<blink::WebReferrerPolicy>(referrer_policy));
+ }
+
+ navigation_controller_->LoadURLWithParams(params);
+}
+
+void NavigationControllerAndroid::ClearHistory(JNIEnv* env, jobject obj) {
+ // TODO(creis): Do callers of this need to know if it fails?
+ if (navigation_controller_->CanPruneAllButLastCommitted())
+ navigation_controller_->PruneAllButLastCommitted();
+}
+
+jint NavigationControllerAndroid::GetNavigationHistory(JNIEnv* env,
+ jobject obj,
+ jobject history) {
+ // Iterate through navigation entries to populate the list
+ int count = navigation_controller_->GetEntryCount();
+ for (int i = 0; i < count; ++i) {
+ AddNavigationEntryToHistory(
+ env, obj, history, navigation_controller_->GetEntryAtIndex(i), i);
+ }
+
+ return navigation_controller_->GetCurrentEntryIndex();
+}
+
+void NavigationControllerAndroid::GetDirectedNavigationHistory(
+ JNIEnv* env,
+ jobject obj,
+ jobject history,
+ jboolean is_forward,
+ jint max_entries) {
+ // Iterate through navigation entries to populate the list
+ int count = navigation_controller_->GetEntryCount();
+ int num_added = 0;
+ int increment_value = is_forward ? 1 : -1;
+ for (int i = navigation_controller_->GetCurrentEntryIndex() + increment_value;
+ i >= 0 && i < count;
+ i += increment_value) {
+ if (num_added >= max_entries)
+ break;
+
+ AddNavigationEntryToHistory(
+ env, obj, history, navigation_controller_->GetEntryAtIndex(i), i);
+ num_added++;
+ }
+}
+
+ScopedJavaLocalRef<jstring>
+NavigationControllerAndroid::GetOriginalUrlForVisibleNavigationEntry(
+ JNIEnv* env,
+ jobject obj) {
+ NavigationEntry* entry = navigation_controller_->GetVisibleEntry();
+ if (entry == NULL)
+ return ScopedJavaLocalRef<jstring>(env, NULL);
+ return ConvertUTF8ToJavaString(env, entry->GetOriginalRequestURL().spec());
+}
+
+void NavigationControllerAndroid::ClearSslPreferences(JNIEnv* env,
+ jobject obj) {
+ content::SSLHostStateDelegate* delegate =
+ navigation_controller_->GetBrowserContext()->GetSSLHostStateDelegate();
+ if (delegate)
+ delegate->Clear();
+}
+
+bool NavigationControllerAndroid::GetUseDesktopUserAgent(JNIEnv* env,
+ jobject obj) {
+ NavigationEntry* entry = navigation_controller_->GetVisibleEntry();
+ return entry && entry->GetIsOverridingUserAgent();
+}
+
+void NavigationControllerAndroid::SetUseDesktopUserAgent(
+ JNIEnv* env,
+ jobject obj,
+ jboolean enabled,
+ jboolean reload_on_state_change) {
+ if (GetUseDesktopUserAgent(env, obj) == enabled)
+ return;
+
+ // Make sure the navigation entry actually exists.
+ NavigationEntry* entry = navigation_controller_->GetVisibleEntry();
+ if (!entry)
+ return;
+
+ // Set the flag in the NavigationEntry.
+ entry->SetIsOverridingUserAgent(enabled);
+
+ // Send the override to the renderer.
+ if (reload_on_state_change) {
+ // Reloading the page will send the override down as part of the
+ // navigation IPC message.
+ navigation_controller_->ReloadOriginalRequestURL(false);
+ }
+}
+
} // namespace content
« no previous file with comments | « content/browser/frame_host/navigation_controller_android.h ('k') | content/content.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698