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

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

Issue 1541463002: Rename [Web]PageSerializer[Test|Client|Impl] to ...FrameSerializer... (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mhtml-deduplication-of-resources
Patch Set: Rebasing... Created 4 years, 11 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
« no previous file with comments | « content/common/frame_messages.h ('k') | content/renderer/render_frame_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 16 matching lines...) Expand all
27 #include "net/base/filename_util.h" 27 #include "net/base/filename_util.h"
28 #include "net/url_request/url_request_context.h" 28 #include "net/url_request/url_request_context.h"
29 #include "third_party/WebKit/public/platform/WebCString.h" 29 #include "third_party/WebKit/public/platform/WebCString.h"
30 #include "third_party/WebKit/public/platform/WebData.h" 30 #include "third_party/WebKit/public/platform/WebData.h"
31 #include "third_party/WebKit/public/platform/WebString.h" 31 #include "third_party/WebKit/public/platform/WebString.h"
32 #include "third_party/WebKit/public/platform/WebURL.h" 32 #include "third_party/WebKit/public/platform/WebURL.h"
33 #include "third_party/WebKit/public/platform/WebVector.h" 33 #include "third_party/WebKit/public/platform/WebVector.h"
34 #include "third_party/WebKit/public/web/WebDocument.h" 34 #include "third_party/WebKit/public/web/WebDocument.h"
35 #include "third_party/WebKit/public/web/WebElement.h" 35 #include "third_party/WebKit/public/web/WebElement.h"
36 #include "third_party/WebKit/public/web/WebElementCollection.h" 36 #include "third_party/WebKit/public/web/WebElementCollection.h"
37 #include "third_party/WebKit/public/web/WebFrameSerializer.h"
38 #include "third_party/WebKit/public/web/WebFrameSerializerClient.h"
37 #include "third_party/WebKit/public/web/WebLocalFrame.h" 39 #include "third_party/WebKit/public/web/WebLocalFrame.h"
38 #include "third_party/WebKit/public/web/WebMetaElement.h" 40 #include "third_party/WebKit/public/web/WebMetaElement.h"
39 #include "third_party/WebKit/public/web/WebNode.h" 41 #include "third_party/WebKit/public/web/WebNode.h"
40 #include "third_party/WebKit/public/web/WebPageSerializer.h"
41 #include "third_party/WebKit/public/web/WebPageSerializerClient.h"
42 #include "third_party/WebKit/public/web/WebView.h" 42 #include "third_party/WebKit/public/web/WebView.h"
43 43
44 using blink::WebCString; 44 using blink::WebCString;
45 using blink::WebData; 45 using blink::WebData;
46 using blink::WebDocument; 46 using blink::WebDocument;
47 using blink::WebElement; 47 using blink::WebElement;
48 using blink::WebMetaElement; 48 using blink::WebMetaElement;
49 using blink::WebElementCollection; 49 using blink::WebElementCollection;
50 using blink::WebFrame; 50 using blink::WebFrame;
51 using blink::WebFrameSerializer;
52 using blink::WebFrameSerializerClient;
51 using blink::WebLocalFrame; 53 using blink::WebLocalFrame;
52 using blink::WebNode; 54 using blink::WebNode;
53 using blink::WebPageSerializer;
54 using blink::WebPageSerializerClient;
55 using blink::WebString; 55 using blink::WebString;
56 using blink::WebURL; 56 using blink::WebURL;
57 using blink::WebView; 57 using blink::WebView;
58 using blink::WebVector; 58 using blink::WebVector;
59 59
60 namespace content { 60 namespace content {
61 61
62 bool HasDocType(const WebDocument& doc) { 62 bool HasDocType(const WebDocument& doc) {
63 return doc.firstChild().isDocumentTypeNode(); 63 return doc.firstChild().isDocumentTypeNode();
64 } 64 }
65 65
66 class LoadObserver : public RenderViewObserver { 66 class LoadObserver : public RenderViewObserver {
67 public: 67 public:
68 LoadObserver(RenderView* render_view, const base::Closure& quit_closure) 68 LoadObserver(RenderView* render_view, const base::Closure& quit_closure)
69 : RenderViewObserver(render_view), 69 : RenderViewObserver(render_view),
70 quit_closure_(quit_closure) {} 70 quit_closure_(quit_closure) {}
71 71
72 void DidFinishLoad(blink::WebLocalFrame* frame) override { 72 void DidFinishLoad(blink::WebLocalFrame* frame) override {
73 if (frame == render_view()->GetWebView()->mainFrame()) 73 if (frame == render_view()->GetWebView()->mainFrame())
74 quit_closure_.Run(); 74 quit_closure_.Run();
75 } 75 }
76 76
77 private: 77 private:
78 base::Closure quit_closure_; 78 base::Closure quit_closure_;
79 }; 79 };
80 80
81 class DomSerializerTests : public ContentBrowserTest, 81 class DomSerializerTests : public ContentBrowserTest,
82 public WebPageSerializerClient { 82 public WebFrameSerializerClient {
83 public: 83 public:
84 DomSerializerTests() : serialization_reported_end_of_data_(false) {} 84 DomSerializerTests() : serialization_reported_end_of_data_(false) {}
85 85
86 void SetUpCommandLine(base::CommandLine* command_line) override { 86 void SetUpCommandLine(base::CommandLine* command_line) override {
87 command_line->AppendSwitch(switches::kSingleProcess); 87 command_line->AppendSwitch(switches::kSingleProcess);
88 #if defined(OS_WIN) 88 #if defined(OS_WIN)
89 // Don't want to try to create a GPU process. 89 // Don't want to try to create a GPU process.
90 command_line->AppendSwitch(switches::kDisableGpu); 90 command_line->AppendSwitch(switches::kDisableGpu);
91 #endif 91 #endif
92 } 92 }
93 93
94 void SetUpOnMainThread() override { 94 void SetUpOnMainThread() override {
95 render_view_routing_id_ = 95 render_view_routing_id_ =
96 shell()->web_contents()->GetRenderViewHost()->GetRoutingID(); 96 shell()->web_contents()->GetRenderViewHost()->GetRoutingID();
97 } 97 }
98 98
99 // DomSerializerDelegate. 99 // DomSerializerDelegate.
100 void didSerializeDataForFrame(const WebCString& data, 100 void didSerializeDataForFrame(const WebCString& data,
101 PageSerializationStatus status) override { 101 FrameSerializationStatus status) override {
102 // Check finish status of current frame. 102 // Check finish status of current frame.
103 ASSERT_FALSE(serialization_reported_end_of_data_); 103 ASSERT_FALSE(serialization_reported_end_of_data_);
104 104
105 // Add data to corresponding frame's content. 105 // Add data to corresponding frame's content.
106 serialized_contents_ += data; 106 serialized_contents_ += data;
107 107
108 // Current frame is completed saving, change the finish status. 108 // Current frame is completed saving, change the finish status.
109 if (status == WebPageSerializerClient::CurrentFrameIsFinished) 109 if (status == WebFrameSerializerClient::CurrentFrameIsFinished)
110 serialization_reported_end_of_data_ = true; 110 serialization_reported_end_of_data_ = true;
111 } 111 }
112 112
113 RenderView* GetRenderView() { 113 RenderView* GetRenderView() {
114 return RenderView::FromRoutingID(render_view_routing_id_); 114 return RenderView::FromRoutingID(render_view_routing_id_);
115 } 115 }
116 116
117 WebView* GetWebView() { 117 WebView* GetWebView() {
118 return GetRenderView()->GetWebView(); 118 return GetRenderView()->GetWebView();
119 } 119 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 // Serialize DOM belonging to a frame with the specified |frame_url|. 161 // Serialize DOM belonging to a frame with the specified |frame_url|.
162 void SerializeDomForURL(const GURL& frame_url) { 162 void SerializeDomForURL(const GURL& frame_url) {
163 // Find corresponding WebFrame according to frame_url. 163 // Find corresponding WebFrame according to frame_url.
164 WebFrame* web_frame = FindSubFrameByURL(frame_url); 164 WebFrame* web_frame = FindSubFrameByURL(frame_url);
165 ASSERT_TRUE(web_frame != NULL); 165 ASSERT_TRUE(web_frame != NULL);
166 WebString file_path = 166 WebString file_path =
167 base::FilePath(FILE_PATH_LITERAL("c:\\dummy.htm")).AsUTF16Unsafe(); 167 base::FilePath(FILE_PATH_LITERAL("c:\\dummy.htm")).AsUTF16Unsafe();
168 std::vector<std::pair<WebURL, WebString>> url_to_local_path; 168 std::vector<std::pair<WebURL, WebString>> url_to_local_path;
169 url_to_local_path.push_back(std::make_pair(WebURL(frame_url), file_path)); 169 url_to_local_path.push_back(std::make_pair(WebURL(frame_url), file_path));
170 // Start serializing DOM. 170 // Start serializing DOM.
171 bool result = WebPageSerializer::serialize( 171 bool result = WebFrameSerializer::serialize(
172 web_frame->toWebLocalFrame(), 172 web_frame->toWebLocalFrame(),
173 static_cast<WebPageSerializerClient*>(this), url_to_local_path); 173 static_cast<WebFrameSerializerClient*>(this), url_to_local_path);
174 ASSERT_TRUE(result); 174 ASSERT_TRUE(result);
175 } 175 }
176 176
177 void SerializeHTMLDOMWithDocTypeOnRenderer(const GURL& file_url) { 177 void SerializeHTMLDOMWithDocTypeOnRenderer(const GURL& file_url) {
178 // Make sure original contents have document type. 178 // Make sure original contents have document type.
179 WebFrame* web_frame = FindSubFrameByURL(file_url); 179 WebFrame* web_frame = FindSubFrameByURL(file_url);
180 ASSERT_TRUE(web_frame != NULL); 180 ASSERT_TRUE(web_frame != NULL);
181 WebDocument doc = web_frame->document(); 181 WebDocument doc = web_frame->document();
182 ASSERT_TRUE(HasDocType(doc)); 182 ASSERT_TRUE(HasDocType(doc));
183 // Do serialization. 183 // Do serialization.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 SerializeDomForURL(xml_file_url); 216 SerializeDomForURL(xml_file_url);
217 // Compare the serialized contents with original contents. 217 // Compare the serialized contents with original contents.
218 ASSERT_TRUE(serialization_reported_end_of_data_); 218 ASSERT_TRUE(serialization_reported_end_of_data_);
219 ASSERT_EQ(original_contents, serialized_contents_); 219 ASSERT_EQ(original_contents, serialized_contents_);
220 } 220 }
221 221
222 void SerializeHTMLDOMWithAddingMOTWOnRenderer( 222 void SerializeHTMLDOMWithAddingMOTWOnRenderer(
223 const GURL& file_url, const std::string& original_contents) { 223 const GURL& file_url, const std::string& original_contents) {
224 // Make sure original contents does not have MOTW; 224 // Make sure original contents does not have MOTW;
225 std::string motw_declaration = 225 std::string motw_declaration =
226 WebPageSerializer::generateMarkOfTheWebDeclaration(file_url).utf8(); 226 WebFrameSerializer::generateMarkOfTheWebDeclaration(file_url).utf8();
227 ASSERT_FALSE(motw_declaration.empty()); 227 ASSERT_FALSE(motw_declaration.empty());
228 // The encoding of original contents is ISO-8859-1, so we convert the MOTW 228 // The encoding of original contents is ISO-8859-1, so we convert the MOTW
229 // declaration to ASCII and search whether original contents has it or not. 229 // declaration to ASCII and search whether original contents has it or not.
230 ASSERT_TRUE(std::string::npos == original_contents.find(motw_declaration)); 230 ASSERT_TRUE(std::string::npos == original_contents.find(motw_declaration));
231 231
232 // Do serialization. 232 // Do serialization.
233 SerializeDomForURL(file_url); 233 SerializeDomForURL(file_url);
234 // Make sure the serialized contents have MOTW ; 234 // Make sure the serialized contents have MOTW ;
235 ASSERT_TRUE(serialization_reported_end_of_data_); 235 ASSERT_TRUE(serialization_reported_end_of_data_);
236 ASSERT_FALSE(std::string::npos == 236 ASSERT_FALSE(std::string::npos ==
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 ASSERT_TRUE(std::string(text_node.nodeValue().utf8()) == "&<>\"\'"); 362 ASSERT_TRUE(std::string(text_node.nodeValue().utf8()) == "&<>\"\'");
363 // Do serialization. 363 // Do serialization.
364 SerializeDomForURL(file_url); 364 SerializeDomForURL(file_url);
365 // Compare the serialized contents with original contents. 365 // Compare the serialized contents with original contents.
366 ASSERT_TRUE(serialization_reported_end_of_data_); 366 ASSERT_TRUE(serialization_reported_end_of_data_);
367 // Compare the serialized contents with original contents to make sure 367 // Compare the serialized contents with original contents to make sure
368 // they are same. 368 // they are same.
369 // Because we add MOTW when serializing DOM, so before comparison, we also 369 // Because we add MOTW when serializing DOM, so before comparison, we also
370 // need to add MOTW to original_contents. 370 // need to add MOTW to original_contents.
371 std::string original_str = 371 std::string original_str =
372 WebPageSerializer::generateMarkOfTheWebDeclaration(file_url).utf8(); 372 WebFrameSerializer::generateMarkOfTheWebDeclaration(file_url).utf8();
373 original_str += original_contents; 373 original_str += original_contents;
374 // Since WebCore now inserts a new HEAD element if there is no HEAD element 374 // Since WebCore now inserts a new HEAD element if there is no HEAD element
375 // when creating BODY element. (Please see 375 // when creating BODY element. (Please see
376 // HTMLParser::bodyCreateErrorCheck.) We need to append the HEAD content and 376 // HTMLParser::bodyCreateErrorCheck.) We need to append the HEAD content and
377 // corresponding META content if we find WebCore-generated HEAD element. 377 // corresponding META content if we find WebCore-generated HEAD element.
378 if (!doc.head().isNull()) { 378 if (!doc.head().isNull()) {
379 WebString encoding = web_frame->document().encoding(); 379 WebString encoding = web_frame->document().encoding();
380 std::string htmlTag("<html>"); 380 std::string htmlTag("<html>");
381 std::string::size_type pos = original_str.find(htmlTag); 381 std::string::size_type pos = original_str.find(htmlTag);
382 ASSERT_NE(std::string::npos, pos); 382 ASSERT_NE(std::string::npos, pos);
383 pos += htmlTag.length(); 383 pos += htmlTag.length();
384 std::string head_part("<head>"); 384 std::string head_part("<head>");
385 head_part += 385 head_part +=
386 WebPageSerializer::generateMetaCharsetDeclaration(encoding).utf8(); 386 WebFrameSerializer::generateMetaCharsetDeclaration(encoding).utf8();
387 head_part += "</head>"; 387 head_part += "</head>";
388 original_str.insert(pos, head_part); 388 original_str.insert(pos, head_part);
389 } 389 }
390 ASSERT_EQ(original_str, serialized_contents_); 390 ASSERT_EQ(original_str, serialized_contents_);
391 } 391 }
392 392
393 void SerializeHTMLDOMWithEntitiesInAttributeValueOnRenderer() { 393 void SerializeHTMLDOMWithEntitiesInAttributeValueOnRenderer() {
394 base::FilePath page_file_path = GetTestFilePath( 394 base::FilePath page_file_path = GetTestFilePath(
395 "dom_serializer", "dom_serializer/htmlentities_in_attribute_value.htm"); 395 "dom_serializer", "dom_serializer/htmlentities_in_attribute_value.htm");
396 // Get file URL. The URL is dummy URL to identify the following loading 396 // Get file URL. The URL is dummy URL to identify the following loading
(...skipping 14 matching lines...) Expand all
411 ASSERT_TRUE(!body_ele.isNull()); 411 ASSERT_TRUE(!body_ele.isNull());
412 WebString value = body_ele.getAttribute("title"); 412 WebString value = body_ele.getAttribute("title");
413 ASSERT_TRUE(std::string(value.utf8()) == "&<>\"\'"); 413 ASSERT_TRUE(std::string(value.utf8()) == "&<>\"\'");
414 // Do serialization. 414 // Do serialization.
415 SerializeDomForURL(file_url); 415 SerializeDomForURL(file_url);
416 // Compare the serialized contents with original contents. 416 // Compare the serialized contents with original contents.
417 ASSERT_TRUE(serialization_reported_end_of_data_); 417 ASSERT_TRUE(serialization_reported_end_of_data_);
418 // Compare the serialized contents with original contents to make sure 418 // Compare the serialized contents with original contents to make sure
419 // they are same. 419 // they are same.
420 std::string original_str = 420 std::string original_str =
421 WebPageSerializer::generateMarkOfTheWebDeclaration(file_url).utf8(); 421 WebFrameSerializer::generateMarkOfTheWebDeclaration(file_url).utf8();
422 original_str += original_contents; 422 original_str += original_contents;
423 if (!doc.isNull()) { 423 if (!doc.isNull()) {
424 WebString encoding = web_frame->document().encoding(); 424 WebString encoding = web_frame->document().encoding();
425 std::string htmlTag("<html>"); 425 std::string htmlTag("<html>");
426 std::string::size_type pos = original_str.find(htmlTag); 426 std::string::size_type pos = original_str.find(htmlTag);
427 ASSERT_NE(std::string::npos, pos); 427 ASSERT_NE(std::string::npos, pos);
428 pos += htmlTag.length(); 428 pos += htmlTag.length();
429 std::string head_part("<head>"); 429 std::string head_part("<head>");
430 head_part += 430 head_part +=
431 WebPageSerializer::generateMetaCharsetDeclaration(encoding).utf8(); 431 WebFrameSerializer::generateMetaCharsetDeclaration(encoding).utf8();
432 head_part += "</head>"; 432 head_part += "</head>";
433 original_str.insert(pos, head_part); 433 original_str.insert(pos, head_part);
434 } 434 }
435 ASSERT_EQ(original_str, serialized_contents_); 435 ASSERT_EQ(original_str, serialized_contents_);
436 } 436 }
437 437
438 void SerializeHTMLDOMWithNonStandardEntitiesOnRenderer(const GURL& file_url) { 438 void SerializeHTMLDOMWithNonStandardEntitiesOnRenderer(const GURL& file_url) {
439 // Get value of BODY's title attribute in DOM. 439 // Get value of BODY's title attribute in DOM.
440 WebFrame* web_frame = FindSubFrameByURL(file_url); 440 WebFrame* web_frame = FindSubFrameByURL(file_url);
441 WebDocument doc = web_frame->document(); 441 WebDocument doc = web_frame->document();
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 NavigateToURL(shell(), file_url); 854 NavigateToURL(shell(), file_url);
855 855
856 PostTaskToInProcessRendererAndWait( 856 PostTaskToInProcessRendererAndWait(
857 base::Bind( 857 base::Bind(
858 &DomSerializerTests:: 858 &DomSerializerTests::
859 SubResourceForElementsInNonHTMLNamespaceOnRenderer, 859 SubResourceForElementsInNonHTMLNamespaceOnRenderer,
860 base::Unretained(this), file_url)); 860 base::Unretained(this), file_url));
861 } 861 }
862 862
863 } // namespace content 863 } // namespace content
OLDNEW
« no previous file with comments | « content/common/frame_messages.h ('k') | content/renderer/render_frame_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698