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

Side by Side Diff: content/renderer/savable_resources.cc

Issue 2928033002: Move GetDocument method from WebFrame to WebLocalFrame. (Closed)
Patch Set: Split a DCHECK in two as suggested by boliu@. Created 3 years, 6 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 (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/renderer/savable_resources.h" 5 #include "content/renderer/savable_resources.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 19 matching lines...) Expand all
30 using blink::WebNode; 30 using blink::WebNode;
31 using blink::WebString; 31 using blink::WebString;
32 using blink::WebVector; 32 using blink::WebVector;
33 using blink::WebView; 33 using blink::WebView;
34 34
35 namespace content { 35 namespace content {
36 namespace { 36 namespace {
37 37
38 // Returns |true| if |web_frame| contains (or should be assumed to contain) 38 // Returns |true| if |web_frame| contains (or should be assumed to contain)
39 // a html document. 39 // a html document.
40 bool DoesFrameContainHtmlDocument(const WebFrame& web_frame, 40 bool DoesFrameContainHtmlDocument(WebFrame* web_frame,
41 const WebElement& element) { 41 const WebElement& element) {
42 if (web_frame.IsWebLocalFrame()) { 42 if (web_frame->IsWebLocalFrame()) {
43 WebDocument doc = web_frame.GetDocument(); 43 WebDocument doc = web_frame->ToWebLocalFrame()->GetDocument();
44 return doc.IsHTMLDocument() || doc.IsXHTMLDocument(); 44 return doc.IsHTMLDocument() || doc.IsXHTMLDocument();
45 } 45 }
46 46
47 // Cannot inspect contents of a remote frame, so we use a heuristic: 47 // Cannot inspect contents of a remote frame, so we use a heuristic:
48 // Assume that <iframe> and <frame> elements contain a html document, 48 // Assume that <iframe> and <frame> elements contain a html document,
49 // and other elements (i.e. <object>) contain plugins or other resources. 49 // and other elements (i.e. <object>) contain plugins or other resources.
50 // If the heuristic is wrong (i.e. the remote frame in <object> does 50 // If the heuristic is wrong (i.e. the remote frame in <object> does
51 // contain an html document), then things will still work, but with the 51 // contain an html document), then things will still work, but with the
52 // following caveats: 1) original frame content will be saved and 2) links 52 // following caveats: 1) original frame content will be saved and 2) links
53 // in frame's html doc will not be rewritten to point to locally saved 53 // in frame's html doc will not be rewritten to point to locally saved
54 // files. 54 // files.
55 return element.HasHTMLTagName("iframe") || element.HasHTMLTagName("frame"); 55 return element.HasHTMLTagName("iframe") || element.HasHTMLTagName("frame");
56 } 56 }
57 57
58 // If present and valid, then push the link associated with |element| 58 // If present and valid, then push the link associated with |element|
59 // into either SavableResourcesResult::subframes or 59 // into either SavableResourcesResult::subframes or
60 // SavableResourcesResult::resources_list. 60 // SavableResourcesResult::resources_list.
61 void GetSavableResourceLinkForElement( 61 void GetSavableResourceLinkForElement(
62 const WebElement& element, 62 const WebElement& element,
63 const WebDocument& current_doc, 63 const WebDocument& current_doc,
64 SavableResourcesResult* result) { 64 SavableResourcesResult* result) {
65 // Get absolute URL. 65 // Get absolute URL.
66 WebString link_attribute_value = GetSubResourceLinkFromElement(element); 66 WebString link_attribute_value = GetSubResourceLinkFromElement(element);
67 GURL element_url = current_doc.CompleteURL(link_attribute_value); 67 GURL element_url = current_doc.CompleteURL(link_attribute_value);
68 68
69 // See whether to report this element as a subframe. 69 // See whether to report this element as a subframe.
70 WebFrame* web_frame = WebFrame::FromFrameOwnerElement(element); 70 WebFrame* web_frame = WebFrame::FromFrameOwnerElement(element);
71 if (web_frame && DoesFrameContainHtmlDocument(*web_frame, element)) { 71 if (web_frame && DoesFrameContainHtmlDocument(web_frame, element)) {
72 SavableSubframe subframe; 72 SavableSubframe subframe;
73 subframe.original_url = element_url; 73 subframe.original_url = element_url;
74 subframe.routing_id = RenderFrame::GetRoutingIdForWebFrame(web_frame); 74 subframe.routing_id = RenderFrame::GetRoutingIdForWebFrame(web_frame);
75 result->subframes->push_back(subframe); 75 result->subframes->push_back(subframe);
76 return; 76 return;
77 } 77 }
78 78
79 // Check whether the node has sub resource URL or not. 79 // Check whether the node has sub resource URL or not.
80 if (link_attribute_value.IsNull()) 80 if (link_attribute_value.IsNull())
81 return; 81 return;
82 82
83 // Ignore invalid URL. 83 // Ignore invalid URL.
84 if (!element_url.is_valid()) 84 if (!element_url.is_valid())
85 return; 85 return;
86 86
87 // Ignore those URLs which are not standard protocols. Because FTP 87 // Ignore those URLs which are not standard protocols. Because FTP
88 // protocol does no have cache mechanism, we will skip all 88 // protocol does no have cache mechanism, we will skip all
89 // sub-resources if they use FTP protocol. 89 // sub-resources if they use FTP protocol.
90 if (!element_url.SchemeIsHTTPOrHTTPS() && 90 if (!element_url.SchemeIsHTTPOrHTTPS() &&
91 !element_url.SchemeIs(url::kFileScheme)) 91 !element_url.SchemeIs(url::kFileScheme))
92 return; 92 return;
93 93
94 result->resources_list->push_back(element_url); 94 result->resources_list->push_back(element_url);
95 } 95 }
96 96
97 } // namespace 97 } // namespace
98 98
99 bool GetSavableResourceLinksForFrame(WebFrame* current_frame, 99 bool GetSavableResourceLinksForFrame(WebLocalFrame* current_frame,
100 SavableResourcesResult* result) { 100 SavableResourcesResult* result) {
101 // Get current frame's URL. 101 // Get current frame's URL.
102 GURL current_frame_url = current_frame->GetDocument().Url(); 102 GURL current_frame_url = current_frame->GetDocument().Url();
103 103
104 // If url of current frame is invalid, ignore it. 104 // If url of current frame is invalid, ignore it.
105 if (!current_frame_url.is_valid()) 105 if (!current_frame_url.is_valid())
106 return false; 106 return false;
107 107
108 // If url of current frame is not a savable protocol, ignore it. 108 // If url of current frame is not a savable protocol, ignore it.
109 if (!IsSavableURL(current_frame_url)) 109 if (!IsSavableURL(current_frame_url))
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 // otherwise return NULL. 165 // otherwise return NULL.
166 if (!value.IsNull() && !value.IsEmpty() && 166 if (!value.IsNull() && !value.IsEmpty() &&
167 !base::StartsWith(value.Utf8(), 167 !base::StartsWith(value.Utf8(),
168 "javascript:", base::CompareCase::INSENSITIVE_ASCII)) 168 "javascript:", base::CompareCase::INSENSITIVE_ASCII))
169 return value; 169 return value;
170 170
171 return WebString(); 171 return WebString();
172 } 172 }
173 173
174 } // namespace content 174 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/savable_resources.h ('k') | content/shell/renderer/layout_test/blink_test_runner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698