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

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

Issue 176883012: Set the original url correctly if the frame is loaded via loadData (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments about const and null checks Created 6 years, 9 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 "base/strings/utf_string_conversions.h" 5 #include "base/strings/utf_string_conversions.h"
6 #include "content/public/common/context_menu_params.h" 6 #include "content/public/common/context_menu_params.h"
7 #include "content/renderer/render_frame_impl.h" 7 #include "content/renderer/render_frame_impl.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "third_party/WebKit/public/platform/WebURL.h"
10 #include "third_party/WebKit/public/platform/WebURLRequest.h"
11 #include "third_party/WebKit/public/platform/WebURLResponse.h"
12 #include "third_party/WebKit/public/platform/WebVector.h"
13 #include "third_party/WebKit/public/web/WebDataSource.h"
14 #include "third_party/WebKit/public/web/WebNavigationType.h"
9 #include "ui/gfx/range/range.h" 15 #include "ui/gfx/range/range.h"
16 #include "url/gurl.h"
17
18 using blink::WebURL;
19 using blink::WebURLRequest;
20 using blink::WebURLResponse;
21 using blink::WebVector;
22 using blink::WebDataSource;
23 using blink::WebNavigationType;
24 using blink::WebNavigationTypeOther;
10 25
11 namespace content { 26 namespace content {
12 27
28 class WebDataSourceMock : public WebDataSource {
darin (slow to review) 2014/03/11 20:09:52 Note: This is not obvious, but if you implement We
hush (inactive) 2014/03/12 21:34:21 Thanks for note! In order to call loadData() and o
29 public:
30 void setUnreachableURL(const WebURL url) {
31 unreachable_url_ = url;
32 }
33 void setOriginalRequest(WebURLRequest request) {
34 original_request_ = request;
35 }
36
37 // Override
38 const WebURLRequest& originalRequest() const {
39 return original_request_;
40 }
41 // Override
42 bool hasUnreachableURL() const {
43 return !unreachable_url_.isEmpty();
44 }
45 // Override
46 WebURL unreachableURL() const {
47 return unreachable_url_;
48 }
49 // Override
50 void appendRedirect(const WebURL& url) {
51 redirects_.push_back(url);
52 }
53 // Override
54 void redirectChain(WebVector<WebURL>& result) const {
55 result = redirects_;
56 }
57 // Override
58 bool isClientRedirect() const {
59 return true;
60 }
61 // Override
62 bool replacesCurrentHistoryItem() const {
63 return unreachable_url_.isEmpty();
64 }
65 // Override
66 WebNavigationType navigationType() const {
67 return WebNavigationTypeOther;
68 }
69 // Override
70 double triggeringEventTime() const {
71 return 0.0;
72 }
73 // Override
74 ExtraData* extraData() const {
75 return new ExtraData();
76 }
77 // Override
78 void setExtraData(ExtraData* extraData) {}
79 // Override
80 void setNavigationStartTime(double startTime) {}
81 // Override
82 const WebURLRequest& request() const {
83 return request_;
84 }
85 // Override
86 const WebURLResponse& response() const {
87 return response_;
88 }
89
90 private:
91 WebURL unreachable_url_;
92 WebURLRequest original_request_;
93 WebURLRequest request_;
94 WebURLResponse response_;
95 std::vector<WebURL> redirects_;
96 };
97
13 TEST(RenderFrameImplTest, ShouldUpdateSelectionTextFromContextMenuParams) { 98 TEST(RenderFrameImplTest, ShouldUpdateSelectionTextFromContextMenuParams) {
14 struct { 99 struct {
15 const char* selection_text; 100 const char* selection_text;
16 size_t selection_text_offset; 101 size_t selection_text_offset;
17 gfx::Range selection_range; 102 gfx::Range selection_range;
18 const char* params_selection_text; 103 const char* params_selection_text;
19 bool expected_result; 104 bool expected_result;
20 } cases[] = { 105 } cases[] = {
21 { "test", 0, gfx::Range(0, 4), "test", false }, 106 { "test", 0, gfx::Range(0, 4), "test", false },
22 { "zebestest", 0, gfx::Range(2, 6), "best", false }, 107 { "zebestest", 0, gfx::Range(2, 6), "best", false },
23 { "zebestest", 2, gfx::Range(2, 6), "best", true }, 108 { "zebestest", 2, gfx::Range(2, 6), "best", true },
24 { "test", 0, gfx::Range(0, 4), "hello", true }, 109 { "test", 0, gfx::Range(0, 4), "hello", true },
25 { "best test", 0, gfx::Range(0, 4), "best ", false }, 110 { "best test", 0, gfx::Range(0, 4), "best ", false },
26 { "best test", 0, gfx::Range(0, 5), "best", false }, 111 { "best test", 0, gfx::Range(0, 5), "best", false },
27 }; 112 };
28 113
29 ContextMenuParams params; 114 ContextMenuParams params;
30 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 115 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
31 params.selection_text = base::UTF8ToUTF16(cases[i].params_selection_text); 116 params.selection_text = base::UTF8ToUTF16(cases[i].params_selection_text);
32 EXPECT_EQ(cases[i].expected_result, 117 EXPECT_EQ(cases[i].expected_result,
33 RenderFrameImpl::ShouldUpdateSelectionTextFromContextMenuParams( 118 RenderFrameImpl::ShouldUpdateSelectionTextFromContextMenuParams(
34 base::UTF8ToUTF16(cases[i].selection_text), 119 base::UTF8ToUTF16(cases[i].selection_text),
35 cases[i].selection_text_offset, 120 cases[i].selection_text_offset,
36 cases[i].selection_range, 121 cases[i].selection_range,
37 params)); 122 params));
38 } 123 }
39 } 124 }
40 125
126 TEST(RenderFrameImplTest, GetOriginalRequestUrlViaLoadData) {
127 WebDataSourceMock ds = WebDataSourceMock();
128 WebURL unreachable_url, base_url;
129 unreachable_url = GURL("http://i.am.history.url.in.load.data");
130 base_url = GURL("http://i.am.base.url.in.load.data");
131
132 // When you loadData with base_url and history_url, WebDataSource will regard
133 // history_url as unreachable_url and it will push base_url to the redirect
134 // chain. But you actually didn't load base_url, because it is only used
135 // as the base url for relative paths in data. So history url should be
136 // treated as the original url in this case.
137 ds.setUnreachableURL(unreachable_url);
138 ds.appendRedirect(base_url);
139
140 // history url should be treated as the original url
141 EXPECT_EQ(unreachable_url, RenderFrameImpl::GetOriginalRequestUrl(&ds));
142 }
143
144 TEST(RenderFrameImplTest, GetOriginalRequestUrlViaLoadUrlWithoutRedirects) {
145 // loadUrl scenario, no redirects
146 WebDataSourceMock ds = WebDataSourceMock();
147 WebURL url = GURL("http://www.example.com");
148 ds.setOriginalRequest(WebURLRequest(url));
149 ds.appendRedirect(url);
150
151 EXPECT_EQ(url, RenderFrameImpl::GetOriginalRequestUrl(&ds));
152 }
153
154 TEST(RenderFrameImplTest, GetOriginalRequestUrlViaLoadUrlWithRedirects) {
155 // loadUrl scenario, with redirects
156 WebDataSourceMock ds = WebDataSourceMock();
157 WebURL url1 = GURL("http://url.redirected.from");
158 WebURL url2 = GURL("http://url.redirected.to");
159 ds.appendRedirect(url1);
160 ds.appendRedirect(url2);
161 ds.setOriginalRequest(WebURLRequest(url1));
162 EXPECT_EQ(url1, RenderFrameImpl::GetOriginalRequestUrl(&ds));
163 }
164
41 } // namespace content 165 } // namespace content
OLDNEW
« content/renderer/render_frame_impl.cc ('K') | « content/renderer/render_frame_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698