| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "chrome/browser/android/tab_android.h" | 5 #include "chrome/browser/android/tab_android.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
| 10 #include "base/android/jni_array.h" | |
| 11 #include "base/android/jni_string.h" | 10 #include "base/android/jni_string.h" |
| 12 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
| 13 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
| 14 #include "base/trace_event/trace_event.h" | 13 #include "base/trace_event/trace_event.h" |
| 15 #include "cc/layers/layer.h" | 14 #include "cc/layers/layer.h" |
| 16 #include "chrome/browser/android/compositor/tab_content_manager.h" | 15 #include "chrome/browser/android/compositor/tab_content_manager.h" |
| 17 #include "chrome/browser/android/metrics/uma_utils.h" | 16 #include "chrome/browser/android/metrics/uma_utils.h" |
| 18 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h" | 17 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h" |
| 19 #include "chrome/browser/android/offline_pages/offline_page_utils.h" | 18 #include "chrome/browser/android/offline_pages/offline_page_utils.h" |
| 20 #include "chrome/browser/android/tab_web_contents_delegate_android.h" | 19 #include "chrome/browser/android/tab_web_contents_delegate_android.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 #include "content/public/browser/android/content_view_core.h" | 68 #include "content/public/browser/android/content_view_core.h" |
| 70 #include "content/public/browser/browser_thread.h" | 69 #include "content/public/browser/browser_thread.h" |
| 71 #include "content/public/browser/interstitial_page.h" | 70 #include "content/public/browser/interstitial_page.h" |
| 72 #include "content/public/browser/navigation_entry.h" | 71 #include "content/public/browser/navigation_entry.h" |
| 73 #include "content/public/browser/notification_service.h" | 72 #include "content/public/browser/notification_service.h" |
| 74 #include "content/public/browser/render_frame_host.h" | 73 #include "content/public/browser/render_frame_host.h" |
| 75 #include "content/public/browser/render_process_host.h" | 74 #include "content/public/browser/render_process_host.h" |
| 76 #include "content/public/browser/render_view_host.h" | 75 #include "content/public/browser/render_view_host.h" |
| 77 #include "content/public/browser/user_metrics.h" | 76 #include "content/public/browser/user_metrics.h" |
| 78 #include "content/public/browser/web_contents.h" | 77 #include "content/public/browser/web_contents.h" |
| 78 #include "content/public/common/resource_request_body.h" |
| 79 #include "content/public/common/top_controls_state.h" | 79 #include "content/public/common/top_controls_state.h" |
| 80 #include "jni/Tab_jni.h" | 80 #include "jni/Tab_jni.h" |
| 81 #include "net/base/escape.h" | 81 #include "net/base/escape.h" |
| 82 #include "skia/ext/image_operations.h" | 82 #include "skia/ext/image_operations.h" |
| 83 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h" | 83 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h" |
| 84 #include "ui/base/resource/resource_bundle.h" | 84 #include "ui/base/resource/resource_bundle.h" |
| 85 #include "ui/base/window_open_disposition.h" | 85 #include "ui/base/window_open_disposition.h" |
| 86 #include "ui/gfx/android/device_display_info.h" | 86 #include "ui/gfx/android/device_display_info.h" |
| 87 #include "ui/gfx/android/java_bitmap.h" | 87 #include "ui/gfx/android/java_bitmap.h" |
| 88 #include "ui/gfx/favicon_size.h" | 88 #include "ui/gfx/favicon_size.h" |
| 89 #include "ui/gfx/image/image_skia.h" | 89 #include "ui/gfx/image/image_skia.h" |
| 90 | 90 |
| 91 using base::android::AttachCurrentThread; | 91 using base::android::AttachCurrentThread; |
| 92 using base::android::ConvertUTF8ToJavaString; | 92 using base::android::ConvertUTF8ToJavaString; |
| 93 using base::android::ToJavaByteArray; | |
| 94 using content::BrowserThread; | 93 using content::BrowserThread; |
| 95 using content::GlobalRequestID; | 94 using content::GlobalRequestID; |
| 96 using content::NavigationController; | 95 using content::NavigationController; |
| 97 using content::WebContents; | 96 using content::WebContents; |
| 98 using navigation_interception::InterceptNavigationDelegate; | 97 using navigation_interception::InterceptNavigationDelegate; |
| 99 using navigation_interception::NavigationParams; | 98 using navigation_interception::NavigationParams; |
| 100 | 99 |
| 101 TabAndroid* TabAndroid::FromWebContents(content::WebContents* web_contents) { | 100 TabAndroid* TabAndroid::FromWebContents(content::WebContents* web_contents) { |
| 102 CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(web_contents); | 101 CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(web_contents); |
| 103 if (!core_tab_helper) | 102 if (!core_tab_helper) |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 if (disposition == NEW_POPUP || | 214 if (disposition == NEW_POPUP || |
| 216 disposition == NEW_FOREGROUND_TAB || | 215 disposition == NEW_FOREGROUND_TAB || |
| 217 disposition == NEW_BACKGROUND_TAB || | 216 disposition == NEW_BACKGROUND_TAB || |
| 218 disposition == NEW_WINDOW || | 217 disposition == NEW_WINDOW || |
| 219 disposition == OFF_THE_RECORD) { | 218 disposition == OFF_THE_RECORD) { |
| 220 JNIEnv* env = AttachCurrentThread(); | 219 JNIEnv* env = AttachCurrentThread(); |
| 221 ScopedJavaLocalRef<jobject> jobj = weak_java_tab_.get(env); | 220 ScopedJavaLocalRef<jobject> jobj = weak_java_tab_.get(env); |
| 222 ScopedJavaLocalRef<jstring> jurl(ConvertUTF8ToJavaString(env, url.spec())); | 221 ScopedJavaLocalRef<jstring> jurl(ConvertUTF8ToJavaString(env, url.spec())); |
| 223 ScopedJavaLocalRef<jstring> jheaders( | 222 ScopedJavaLocalRef<jstring> jheaders( |
| 224 ConvertUTF8ToJavaString(env, params->extra_headers)); | 223 ConvertUTF8ToJavaString(env, params->extra_headers)); |
| 225 ScopedJavaLocalRef<jbyteArray> jpost_data; | 224 ScopedJavaLocalRef<jobject> jpost_data; |
| 226 if (params->uses_post && | 225 if (params->uses_post && params->post_data) |
| 227 params->browser_initiated_post_data.get() && | 226 jpost_data = params->post_data->ToJavaObject(env); |
| 228 params->browser_initiated_post_data.get()->size()) { | |
| 229 jpost_data = ToJavaByteArray( | |
| 230 env, reinterpret_cast<const uint8_t*>( | |
| 231 params->browser_initiated_post_data.get()->front()), | |
| 232 params->browser_initiated_post_data.get()->size()); | |
| 233 } | |
| 234 Java_Tab_openNewTab(env, | 227 Java_Tab_openNewTab(env, |
| 235 jobj.obj(), | 228 jobj.obj(), |
| 236 jurl.obj(), | 229 jurl.obj(), |
| 237 jheaders.obj(), | 230 jheaders.obj(), |
| 238 jpost_data.obj(), | 231 jpost_data.obj(), |
| 239 disposition, | 232 disposition, |
| 240 params->created_with_opener, | 233 params->created_with_opener, |
| 241 params->is_renderer_initiated); | 234 params->is_renderer_initiated); |
| 242 } else { | 235 } else { |
| 243 NOTIMPLEMENTED(); | 236 NOTIMPLEMENTED(); |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 return base::android::ScopedJavaLocalRef<jobject>(); | 505 return base::android::ScopedJavaLocalRef<jobject>(); |
| 513 | 506 |
| 514 return profile_android->GetJavaObject(); | 507 return profile_android->GetJavaObject(); |
| 515 } | 508 } |
| 516 | 509 |
| 517 TabAndroid::TabLoadStatus TabAndroid::LoadUrl( | 510 TabAndroid::TabLoadStatus TabAndroid::LoadUrl( |
| 518 JNIEnv* env, | 511 JNIEnv* env, |
| 519 const JavaParamRef<jobject>& obj, | 512 const JavaParamRef<jobject>& obj, |
| 520 const JavaParamRef<jstring>& url, | 513 const JavaParamRef<jstring>& url, |
| 521 const JavaParamRef<jstring>& j_extra_headers, | 514 const JavaParamRef<jstring>& j_extra_headers, |
| 522 const JavaParamRef<jbyteArray>& j_post_data, | 515 const JavaParamRef<jobject>& j_post_data, |
| 523 jint page_transition, | 516 jint page_transition, |
| 524 const JavaParamRef<jstring>& j_referrer_url, | 517 const JavaParamRef<jstring>& j_referrer_url, |
| 525 jint referrer_policy, | 518 jint referrer_policy, |
| 526 jboolean is_renderer_initiated, | 519 jboolean is_renderer_initiated, |
| 527 jboolean should_replace_current_entry, | 520 jboolean should_replace_current_entry, |
| 528 jlong intent_received_timestamp, | 521 jlong intent_received_timestamp, |
| 529 jboolean has_user_gesture) { | 522 jboolean has_user_gesture) { |
| 530 if (!web_contents()) | 523 if (!web_contents()) |
| 531 return PAGE_LOAD_FAILED; | 524 return PAGE_LOAD_FAILED; |
| 532 | 525 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 } | 573 } |
| 581 | 574 |
| 582 content::NavigationController::LoadURLParams load_params(fixed_url); | 575 content::NavigationController::LoadURLParams load_params(fixed_url); |
| 583 if (j_extra_headers) { | 576 if (j_extra_headers) { |
| 584 load_params.extra_headers = base::android::ConvertJavaStringToUTF8( | 577 load_params.extra_headers = base::android::ConvertJavaStringToUTF8( |
| 585 env, | 578 env, |
| 586 j_extra_headers); | 579 j_extra_headers); |
| 587 } | 580 } |
| 588 if (j_post_data) { | 581 if (j_post_data) { |
| 589 load_params.load_type = | 582 load_params.load_type = |
| 590 content::NavigationController::LOAD_TYPE_BROWSER_INITIATED_HTTP_POST; | 583 content::NavigationController::LOAD_TYPE_HTTP_POST; |
| 591 std::vector<uint8_t> post_data; | 584 load_params.post_data = |
| 592 base::android::JavaByteArrayToByteVector(env, j_post_data, &post_data); | 585 content::ResourceRequestBody::FromJavaObject(env, j_post_data); |
| 593 load_params.browser_initiated_post_data = | |
| 594 base::RefCountedBytes::TakeVector(&post_data); | |
| 595 } | 586 } |
| 596 load_params.transition_type = | 587 load_params.transition_type = |
| 597 ui::PageTransitionFromInt(page_transition); | 588 ui::PageTransitionFromInt(page_transition); |
| 598 if (j_referrer_url) { | 589 if (j_referrer_url) { |
| 599 load_params.referrer = content::Referrer( | 590 load_params.referrer = content::Referrer( |
| 600 GURL(base::android::ConvertJavaStringToUTF8(env, j_referrer_url)), | 591 GURL(base::android::ConvertJavaStringToUTF8(env, j_referrer_url)), |
| 601 static_cast<blink::WebReferrerPolicy>(referrer_policy)); | 592 static_cast<blink::WebReferrerPolicy>(referrer_policy)); |
| 602 } | 593 } |
| 603 const base::string16 search_terms = | 594 const base::string16 search_terms = |
| 604 search::ExtractSearchTermsFromURL(GetProfile(), gurl); | 595 search::ExtractSearchTermsFromURL(GetProfile(), gurl); |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 static void Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 901 static void Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 911 TRACE_EVENT0("native", "TabAndroid::Init"); | 902 TRACE_EVENT0("native", "TabAndroid::Init"); |
| 912 // This will automatically bind to the Java object and pass ownership there. | 903 // This will automatically bind to the Java object and pass ownership there. |
| 913 new TabAndroid(env, obj); | 904 new TabAndroid(env, obj); |
| 914 } | 905 } |
| 915 | 906 |
| 916 // static | 907 // static |
| 917 bool TabAndroid::RegisterTabAndroid(JNIEnv* env) { | 908 bool TabAndroid::RegisterTabAndroid(JNIEnv* env) { |
| 918 return RegisterNativesImpl(env); | 909 return RegisterNativesImpl(env); |
| 919 } | 910 } |
| OLD | NEW |