| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "chrome/browser/search/iframe_source.h" | 5 #include "chrome/browser/search/iframe_source.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/memory/ref_counted_memory.h" | 10 #include "base/memory/ref_counted_memory.h" |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 | 82 |
| 83 TestIframeSource* source() { return source_.get(); } | 83 TestIframeSource* source() { return source_.get(); } |
| 84 | 84 |
| 85 std::string response_string() { | 85 std::string response_string() { |
| 86 if (response_.get()) { | 86 if (response_.get()) { |
| 87 return std::string(response_->front_as<char>(), response_->size()); | 87 return std::string(response_->front_as<char>(), response_->size()); |
| 88 } | 88 } |
| 89 return ""; | 89 return ""; |
| 90 } | 90 } |
| 91 | 91 |
| 92 std::unique_ptr<net::URLRequest> MockRequest(const std::string& url, | |
| 93 int render_process_id) { | |
| 94 std::unique_ptr<net::URLRequest> request( | |
| 95 resource_context_.GetRequestContext()->CreateRequest( | |
| 96 GURL(url), net::DEFAULT_PRIORITY, NULL, | |
| 97 TRAFFIC_ANNOTATION_FOR_TESTS)); | |
| 98 content::ResourceRequestInfo::AllocateForTesting( | |
| 99 request.get(), content::RESOURCE_TYPE_SUB_FRAME, &resource_context_, | |
| 100 render_process_id, MSG_ROUTING_NONE, MSG_ROUTING_NONE, | |
| 101 /*is_main_frame=*/false, | |
| 102 /*parent_is_main_frame=*/false, | |
| 103 /*allow_download=*/true, | |
| 104 /*is_async=*/false, content::PREVIEWS_OFF); | |
| 105 return request; | |
| 106 } | |
| 107 | |
| 108 void SendResource(int resource_id) { | 92 void SendResource(int resource_id) { |
| 109 source()->SendResource(resource_id, callback_); | 93 source()->SendResource(resource_id, callback_); |
| 110 } | 94 } |
| 111 | 95 |
| 112 void SendJSWithOrigin(int resource_id) { | 96 void SendJSWithOrigin(int resource_id) { |
| 113 source()->SendJSWithOrigin( | 97 source()->SendJSWithOrigin( |
| 114 resource_id, content::ResourceRequestInfo::WebContentsGetter(), | 98 resource_id, content::ResourceRequestInfo::WebContentsGetter(), |
| 115 callback_); | 99 callback_); |
| 116 } | 100 } |
| 117 | 101 |
| 102 bool ShouldService(const std::string& path, int process_id) { |
| 103 return source()->ShouldServiceRequest(GURL(path), &resource_context_, |
| 104 process_id); |
| 105 } |
| 106 |
| 118 private: | 107 private: |
| 119 void SetUp() override { | 108 void SetUp() override { |
| 120 source_.reset(new TestIframeSource()); | 109 source_.reset(new TestIframeSource()); |
| 121 callback_ = base::Bind(&IframeSourceTest::SaveResponse, | 110 callback_ = base::Bind(&IframeSourceTest::SaveResponse, |
| 122 base::Unretained(this)); | 111 base::Unretained(this)); |
| 123 instant_io_context_ = new InstantIOContext; | 112 instant_io_context_ = new InstantIOContext; |
| 124 InstantIOContext::SetUserDataOnIO(&resource_context_, instant_io_context_); | 113 InstantIOContext::SetUserDataOnIO(&resource_context_, instant_io_context_); |
| 125 source_->set_origin(kInstantOrigin); | 114 source_->set_origin(kInstantOrigin); |
| 126 InstantIOContext::AddInstantProcessOnIO(instant_io_context_, | 115 InstantIOContext::AddInstantProcessOnIO(instant_io_context_, |
| 127 kInstantRendererPID); | 116 kInstantRendererPID); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 138 | 127 |
| 139 net::TestURLRequestContext test_url_request_context_; | 128 net::TestURLRequestContext test_url_request_context_; |
| 140 content::MockResourceContext resource_context_; | 129 content::MockResourceContext resource_context_; |
| 141 std::unique_ptr<TestIframeSource> source_; | 130 std::unique_ptr<TestIframeSource> source_; |
| 142 content::URLDataSource::GotDataCallback callback_; | 131 content::URLDataSource::GotDataCallback callback_; |
| 143 scoped_refptr<InstantIOContext> instant_io_context_; | 132 scoped_refptr<InstantIOContext> instant_io_context_; |
| 144 scoped_refptr<base::RefCountedMemory> response_; | 133 scoped_refptr<base::RefCountedMemory> response_; |
| 145 }; | 134 }; |
| 146 | 135 |
| 147 TEST_F(IframeSourceTest, ShouldServiceRequest) { | 136 TEST_F(IframeSourceTest, ShouldServiceRequest) { |
| 148 std::unique_ptr<net::URLRequest> request; | |
| 149 source()->set_origin(kNonInstantOrigin); | 137 source()->set_origin(kNonInstantOrigin); |
| 150 request = MockRequest("http://test/loader.js", kNonInstantRendererPID); | 138 EXPECT_FALSE(ShouldService("http://test/loader.js", kNonInstantRendererPID)); |
| 151 EXPECT_FALSE(source()->ShouldServiceRequest(request.get())); | |
| 152 source()->set_origin(kInstantOrigin); | 139 source()->set_origin(kInstantOrigin); |
| 153 request = MockRequest("chrome-search://bogus/valid.js", kInstantRendererPID); | 140 EXPECT_FALSE( |
| 154 EXPECT_FALSE(source()->ShouldServiceRequest(request.get())); | 141 ShouldService("chrome-search://bogus/valid.js", kInstantRendererPID)); |
| 155 source()->set_origin(kInstantOrigin); | 142 source()->set_origin(kInstantOrigin); |
| 156 request = MockRequest("chrome-search://test/bogus.js", kInstantRendererPID); | 143 EXPECT_FALSE( |
| 157 EXPECT_FALSE(source()->ShouldServiceRequest(request.get())); | 144 ShouldService("chrome-search://test/bogus.js", kInstantRendererPID)); |
| 158 source()->set_origin(kInstantOrigin); | 145 source()->set_origin(kInstantOrigin); |
| 159 request = MockRequest("chrome-search://test/valid.js", kInstantRendererPID); | 146 EXPECT_TRUE( |
| 160 EXPECT_TRUE(source()->ShouldServiceRequest(request.get())); | 147 ShouldService("chrome-search://test/valid.js", kInstantRendererPID)); |
| 161 source()->set_origin(kNonInstantOrigin); | 148 source()->set_origin(kNonInstantOrigin); |
| 162 request = MockRequest("chrome-search://test/valid.js", | 149 EXPECT_FALSE( |
| 163 kNonInstantRendererPID); | 150 ShouldService("chrome-search://test/valid.js", kNonInstantRendererPID)); |
| 164 EXPECT_FALSE(source()->ShouldServiceRequest(request.get())); | |
| 165 source()->set_origin(std::string()); | 151 source()->set_origin(std::string()); |
| 166 request = MockRequest("chrome-search://test/valid.js", kInvalidRendererPID); | 152 EXPECT_FALSE( |
| 167 EXPECT_FALSE(source()->ShouldServiceRequest(request.get())); | 153 ShouldService("chrome-search://test/valid.js", kInvalidRendererPID)); |
| 168 } | 154 } |
| 169 | 155 |
| 170 TEST_F(IframeSourceTest, GetMimeType) { | 156 TEST_F(IframeSourceTest, GetMimeType) { |
| 171 // URLDataManagerBackend does not include / in path_and_query. | 157 // URLDataManagerBackend does not include / in path_and_query. |
| 172 EXPECT_EQ("text/html", source()->GetMimeType("foo.html")); | 158 EXPECT_EQ("text/html", source()->GetMimeType("foo.html")); |
| 173 EXPECT_EQ("application/javascript", source()->GetMimeType("foo.js")); | 159 EXPECT_EQ("application/javascript", source()->GetMimeType("foo.js")); |
| 174 EXPECT_EQ("text/css", source()->GetMimeType("foo.css")); | 160 EXPECT_EQ("text/css", source()->GetMimeType("foo.css")); |
| 175 EXPECT_EQ("image/png", source()->GetMimeType("foo.png")); | 161 EXPECT_EQ("image/png", source()->GetMimeType("foo.png")); |
| 176 EXPECT_EQ("", source()->GetMimeType("bogus")); | 162 EXPECT_EQ("", source()->GetMimeType("bogus")); |
| 177 } | 163 } |
| 178 | 164 |
| 179 TEST_F(IframeSourceTest, SendResource) { | 165 TEST_F(IframeSourceTest, SendResource) { |
| 180 SendResource(IDR_MOST_VISITED_TITLE_HTML); | 166 SendResource(IDR_MOST_VISITED_TITLE_HTML); |
| 181 EXPECT_FALSE(response_string().empty()); | 167 EXPECT_FALSE(response_string().empty()); |
| 182 } | 168 } |
| 183 | 169 |
| 184 TEST_F(IframeSourceTest, SendJSWithOrigin) { | 170 TEST_F(IframeSourceTest, SendJSWithOrigin) { |
| 185 source()->set_origin(kInstantOrigin); | 171 source()->set_origin(kInstantOrigin); |
| 186 SendJSWithOrigin(IDR_MOST_VISITED_TITLE_JS); | 172 SendJSWithOrigin(IDR_MOST_VISITED_TITLE_JS); |
| 187 EXPECT_FALSE(response_string().empty()); | 173 EXPECT_FALSE(response_string().empty()); |
| 188 source()->set_origin(kNonInstantOrigin); | 174 source()->set_origin(kNonInstantOrigin); |
| 189 SendJSWithOrigin(IDR_MOST_VISITED_TITLE_JS); | 175 SendJSWithOrigin(IDR_MOST_VISITED_TITLE_JS); |
| 190 EXPECT_FALSE(response_string().empty()); | 176 EXPECT_FALSE(response_string().empty()); |
| 191 source()->set_origin(std::string()); | 177 source()->set_origin(std::string()); |
| 192 SendJSWithOrigin(IDR_MOST_VISITED_TITLE_JS); | 178 SendJSWithOrigin(IDR_MOST_VISITED_TITLE_JS); |
| 193 EXPECT_TRUE(response_string().empty()); | 179 EXPECT_TRUE(response_string().empty()); |
| 194 } | 180 } |
| OLD | NEW |