| 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 "android_webview/renderer/aw_render_view_ext.h" | 5 #include "android_webview/renderer/aw_render_view_ext.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "android_webview/common/aw_hit_test_data.h" | 9 #include "android_webview/common/aw_hit_test_data.h" |
| 10 #include "android_webview/common/render_view_messages.h" | 10 #include "android_webview/common/render_view_messages.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 #include "third_party/WebKit/public/web/WebNodeList.h" | 30 #include "third_party/WebKit/public/web/WebNodeList.h" |
| 31 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" | 31 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" |
| 32 #include "third_party/WebKit/public/web/WebView.h" | 32 #include "third_party/WebKit/public/web/WebView.h" |
| 33 #include "url/url_canon.h" | 33 #include "url/url_canon.h" |
| 34 #include "url/url_util.h" | 34 #include "url/url_util.h" |
| 35 | 35 |
| 36 namespace android_webview { | 36 namespace android_webview { |
| 37 | 37 |
| 38 namespace { | 38 namespace { |
| 39 | 39 |
| 40 bool AllowMixedContent(const blink::WebURL& url) { | |
| 41 // We treat non-standard schemes as "secure" in the WebView to allow them to | |
| 42 // be used for request interception. | |
| 43 // TODO(benm): Tighten this restriction by requiring embedders to register | |
| 44 // their custom schemes? See b/9420953. | |
| 45 GURL gurl(url); | |
| 46 return !gurl.IsStandard(); | |
| 47 } | |
| 48 | |
| 49 GURL GetAbsoluteUrl(const blink::WebNode& node, const string16& url_fragment) { | 40 GURL GetAbsoluteUrl(const blink::WebNode& node, const string16& url_fragment) { |
| 50 return GURL(node.document().completeURL(url_fragment)); | 41 return GURL(node.document().completeURL(url_fragment)); |
| 51 } | 42 } |
| 52 | 43 |
| 53 string16 GetHref(const blink::WebElement& element) { | 44 string16 GetHref(const blink::WebElement& element) { |
| 54 // Get the actual 'href' attribute, which might relative if valid or can | 45 // Get the actual 'href' attribute, which might relative if valid or can |
| 55 // possibly contain garbage otherwise, so not using absoluteLinkURL here. | 46 // possibly contain garbage otherwise, so not using absoluteLinkURL here. |
| 56 return element.getAttribute("href"); | 47 return element.getAttribute("href"); |
| 57 } | 48 } |
| 58 | 49 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 } else if (is_editable) { | 129 } else if (is_editable) { |
| 139 data->type = AwHitTestData::EDIT_TEXT_TYPE; | 130 data->type = AwHitTestData::EDIT_TEXT_TYPE; |
| 140 DCHECK(data->extra_data_for_type.length() == 0); | 131 DCHECK(data->extra_data_for_type.length() == 0); |
| 141 } | 132 } |
| 142 } | 133 } |
| 143 | 134 |
| 144 } // namespace | 135 } // namespace |
| 145 | 136 |
| 146 AwRenderViewExt::AwRenderViewExt(content::RenderView* render_view) | 137 AwRenderViewExt::AwRenderViewExt(content::RenderView* render_view) |
| 147 : content::RenderViewObserver(render_view), page_scale_factor_(0.0f) { | 138 : content::RenderViewObserver(render_view), page_scale_factor_(0.0f) { |
| 148 render_view->GetWebView()->setPermissionClient(this); | |
| 149 } | 139 } |
| 150 | 140 |
| 151 AwRenderViewExt::~AwRenderViewExt() { | 141 AwRenderViewExt::~AwRenderViewExt() { |
| 152 } | 142 } |
| 153 | 143 |
| 154 // static | 144 // static |
| 155 void AwRenderViewExt::RenderViewCreated(content::RenderView* render_view) { | 145 void AwRenderViewExt::RenderViewCreated(content::RenderView* render_view) { |
| 156 new AwRenderViewExt(render_view); // |render_view| takes ownership. | 146 new AwRenderViewExt(render_view); // |render_view| takes ownership. |
| 157 } | 147 } |
| 158 | 148 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 179 if (webview) { | 169 if (webview) { |
| 180 blink::WebVector<blink::WebElement> images; | 170 blink::WebVector<blink::WebElement> images; |
| 181 webview->mainFrame()->document().images(images); | 171 webview->mainFrame()->document().images(images); |
| 182 hasImages = !images.isEmpty(); | 172 hasImages = !images.isEmpty(); |
| 183 } | 173 } |
| 184 } | 174 } |
| 185 Send(new AwViewHostMsg_DocumentHasImagesResponse(routing_id(), id, | 175 Send(new AwViewHostMsg_DocumentHasImagesResponse(routing_id(), id, |
| 186 hasImages)); | 176 hasImages)); |
| 187 } | 177 } |
| 188 | 178 |
| 189 bool AwRenderViewExt::allowDisplayingInsecureContent( | |
| 190 blink::WebFrame* frame, | |
| 191 bool enabled_per_settings, | |
| 192 const blink::WebSecurityOrigin& origin, | |
| 193 const blink::WebURL& url) { | |
| 194 return enabled_per_settings ? true : AllowMixedContent(url); | |
| 195 } | |
| 196 | |
| 197 bool AwRenderViewExt::allowRunningInsecureContent( | |
| 198 blink::WebFrame* frame, | |
| 199 bool enabled_per_settings, | |
| 200 const blink::WebSecurityOrigin& origin, | |
| 201 const blink::WebURL& url) { | |
| 202 return enabled_per_settings ? true : AllowMixedContent(url); | |
| 203 } | |
| 204 | |
| 205 void AwRenderViewExt::DidCommitProvisionalLoad(blink::WebFrame* frame, | 179 void AwRenderViewExt::DidCommitProvisionalLoad(blink::WebFrame* frame, |
| 206 bool is_new_navigation) { | 180 bool is_new_navigation) { |
| 207 content::DocumentState* document_state = | 181 content::DocumentState* document_state = |
| 208 content::DocumentState::FromDataSource(frame->dataSource()); | 182 content::DocumentState::FromDataSource(frame->dataSource()); |
| 209 if (document_state->can_load_local_resources()) { | 183 if (document_state->can_load_local_resources()) { |
| 210 blink::WebSecurityOrigin origin = frame->document().securityOrigin(); | 184 blink::WebSecurityOrigin origin = frame->document().securityOrigin(); |
| 211 origin.grantLoadLocalResources(); | 185 origin.grantLoadLocalResources(); |
| 212 } | 186 } |
| 213 } | 187 } |
| 214 | 188 |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 render_view()->GetWebView()->setFixedLayoutSize(size); | 318 render_view()->GetWebView()->setFixedLayoutSize(size); |
| 345 } | 319 } |
| 346 | 320 |
| 347 void AwRenderViewExt::OnSetBackgroundColor(SkColor c) { | 321 void AwRenderViewExt::OnSetBackgroundColor(SkColor c) { |
| 348 if (!render_view() || !render_view()->GetWebView()) | 322 if (!render_view() || !render_view()->GetWebView()) |
| 349 return; | 323 return; |
| 350 render_view()->GetWebView()->setBaseBackgroundColor(c); | 324 render_view()->GetWebView()->setBaseBackgroundColor(c); |
| 351 } | 325 } |
| 352 | 326 |
| 353 } // namespace android_webview | 327 } // namespace android_webview |
| OLD | NEW |