OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "components/web_contents_delegate_android/web_contents_delegate_android
.h" | 5 #include "components/web_contents_delegate_android/web_contents_delegate_android
.h" |
6 | 6 |
7 #include <android/keycodes.h> | 7 #include <android/keycodes.h> |
8 | 8 |
9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
10 #include "base/android/jni_array.h" | 10 #include "base/android/jni_array.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 return WebContentsDelegate::OpenURLFromTab(source, params); | 83 return WebContentsDelegate::OpenURLFromTab(source, params); |
84 | 84 |
85 if (disposition == NEW_FOREGROUND_TAB || | 85 if (disposition == NEW_FOREGROUND_TAB || |
86 disposition == NEW_BACKGROUND_TAB || | 86 disposition == NEW_BACKGROUND_TAB || |
87 disposition == OFF_THE_RECORD) { | 87 disposition == OFF_THE_RECORD) { |
88 JNIEnv* env = AttachCurrentThread(); | 88 JNIEnv* env = AttachCurrentThread(); |
89 ScopedJavaLocalRef<jstring> java_url = | 89 ScopedJavaLocalRef<jstring> java_url = |
90 ConvertUTF8ToJavaString(env, url.spec()); | 90 ConvertUTF8ToJavaString(env, url.spec()); |
91 ScopedJavaLocalRef<jstring> extra_headers = | 91 ScopedJavaLocalRef<jstring> extra_headers = |
92 ConvertUTF8ToJavaString(env, params.extra_headers); | 92 ConvertUTF8ToJavaString(env, params.extra_headers); |
93 ScopedJavaLocalRef<jbyteArray> post_data; | 93 ScopedJavaLocalRef<jobject> post_data; |
94 if (params.uses_post && | 94 if (params.uses_post && params.post_data) |
95 params.browser_initiated_post_data.get() && | 95 post_data = params.post_data->ToJavaObject(env); |
96 params.browser_initiated_post_data.get()->size()) { | |
97 post_data = base::android::ToJavaByteArray( | |
98 env, params.browser_initiated_post_data.get()->front_as<uint8_t>(), | |
99 params.browser_initiated_post_data.get()->size()); | |
100 } | |
101 Java_WebContentsDelegateAndroid_openNewTab(env, | 96 Java_WebContentsDelegateAndroid_openNewTab(env, |
102 obj.obj(), | 97 obj.obj(), |
103 java_url.obj(), | 98 java_url.obj(), |
104 extra_headers.obj(), | 99 extra_headers.obj(), |
105 post_data.obj(), | 100 post_data.obj(), |
106 disposition, | 101 disposition, |
107 params.is_renderer_initiated); | 102 params.is_renderer_initiated); |
108 return NULL; | 103 return NULL; |
109 } | 104 } |
110 | 105 |
111 // content::OpenURLParams -> content::NavigationController::LoadURLParams | 106 // content::OpenURLParams -> content::NavigationController::LoadURLParams |
112 content::NavigationController::LoadURLParams load_params(url); | 107 content::NavigationController::LoadURLParams load_params(url); |
113 load_params.referrer = params.referrer; | 108 load_params.referrer = params.referrer; |
114 load_params.frame_tree_node_id = params.frame_tree_node_id; | 109 load_params.frame_tree_node_id = params.frame_tree_node_id; |
115 load_params.redirect_chain = params.redirect_chain; | 110 load_params.redirect_chain = params.redirect_chain; |
116 load_params.transition_type = params.transition; | 111 load_params.transition_type = params.transition; |
117 load_params.extra_headers = params.extra_headers; | 112 load_params.extra_headers = params.extra_headers; |
118 load_params.should_replace_current_entry = | 113 load_params.should_replace_current_entry = |
119 params.should_replace_current_entry; | 114 params.should_replace_current_entry; |
120 load_params.is_renderer_initiated = params.is_renderer_initiated; | 115 load_params.is_renderer_initiated = params.is_renderer_initiated; |
121 | 116 |
122 // Only allows the browser-initiated navigation to use POST. | 117 if (params.uses_post) { |
123 if (params.uses_post && !params.is_renderer_initiated) { | 118 load_params.load_type = content::NavigationController::LOAD_TYPE_HTTP_POST; |
124 load_params.load_type = | 119 load_params.post_data = params.post_data; |
125 content::NavigationController::LOAD_TYPE_BROWSER_INITIATED_HTTP_POST; | |
126 load_params.browser_initiated_post_data = | |
127 params.browser_initiated_post_data; | |
128 } | 120 } |
129 | 121 |
130 source->GetController().LoadURLWithParams(load_params); | 122 source->GetController().LoadURLWithParams(load_params); |
131 | 123 |
132 return source; | 124 return source; |
133 } | 125 } |
134 | 126 |
135 void WebContentsDelegateAndroid::NavigationStateChanged( | 127 void WebContentsDelegateAndroid::NavigationStateChanged( |
136 WebContents* source, content::InvalidateTypes changed_flags) { | 128 WebContents* source, content::InvalidateTypes changed_flags) { |
137 JNIEnv* env = AttachCurrentThread(); | 129 JNIEnv* env = AttachCurrentThread(); |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 // Native JNI methods | 429 // Native JNI methods |
438 // ---------------------------------------------------------------------------- | 430 // ---------------------------------------------------------------------------- |
439 | 431 |
440 // Register native methods | 432 // Register native methods |
441 | 433 |
442 bool RegisterWebContentsDelegateAndroid(JNIEnv* env) { | 434 bool RegisterWebContentsDelegateAndroid(JNIEnv* env) { |
443 return RegisterNativesImpl(env); | 435 return RegisterNativesImpl(env); |
444 } | 436 } |
445 | 437 |
446 } // namespace web_contents_delegate_android | 438 } // namespace web_contents_delegate_android |
OLD | NEW |