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 "chrome/browser/extensions/api/web_request/web_request_permissions.h" | 5 #include "chrome/browser/extensions/api/web_request/web_request_permissions.h" |
6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" |
7 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
8 #include "chrome/common/extensions/extension_constants.h" | 9 #include "chrome/common/extensions/extension_constants.h" |
9 #include "chrome/common/extensions/extension_test_util.h" | 10 #include "chrome/common/extensions/extension_test_util.h" |
10 #include "chrome/test/base/testing_profile.h" | 11 #include "chrome/test/base/testing_profile.h" |
11 #include "content/public/browser/resource_request_info.h" | 12 #include "content/public/browser/resource_request_info.h" |
12 #include "content/public/test/test_browser_thread_bundle.h" | 13 #include "content/public/test/test_browser_thread_bundle.h" |
13 #include "extensions/browser/info_map.h" | 14 #include "extensions/browser/info_map.h" |
14 #include "ipc/ipc_message.h" | 15 #include "ipc/ipc_message.h" |
15 #include "net/base/request_priority.h" | 16 #include "net/base/request_priority.h" |
| 17 #include "net/url_request/url_request.h" |
16 #include "net/url_request/url_request_test_util.h" | 18 #include "net/url_request/url_request_test_util.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
18 | 20 |
19 using content::ResourceRequestInfo; | 21 using content::ResourceRequestInfo; |
20 using content::ResourceType; | 22 using content::ResourceType; |
21 using extensions::Extension; | 23 using extensions::Extension; |
22 using extensions::Manifest; | 24 using extensions::Manifest; |
23 using extension_test_util::LoadManifestUnchecked; | 25 using extension_test_util::LoadManifestUnchecked; |
24 | 26 |
25 class ExtensionWebRequestHelpersTestWithThreadsTest : public testing::Test { | 27 class ExtensionWebRequestHelpersTestWithThreadsTest : public testing::Test { |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 }; | 95 }; |
94 const char* non_sensitive_urls[] = { | 96 const char* non_sensitive_urls[] = { |
95 "http://www.google.com/" | 97 "http://www.google.com/" |
96 }; | 98 }; |
97 const int kSigninProcessId = 99; | 99 const int kSigninProcessId = 99; |
98 extension_info_map_->SetSigninProcess(kSigninProcessId); | 100 extension_info_map_->SetSigninProcess(kSigninProcessId); |
99 | 101 |
100 // Check that requests are rejected based on the destination | 102 // Check that requests are rejected based on the destination |
101 for (size_t i = 0; i < arraysize(sensitive_urls); ++i) { | 103 for (size_t i = 0; i < arraysize(sensitive_urls); ++i) { |
102 GURL sensitive_url(sensitive_urls[i]); | 104 GURL sensitive_url(sensitive_urls[i]); |
103 net::TestURLRequest request( | 105 scoped_ptr<net::URLRequest> request(context.CreateRequest( |
104 sensitive_url, net::DEFAULT_PRIORITY, NULL, &context); | 106 sensitive_url, net::DEFAULT_PRIORITY, NULL, NULL)); |
105 EXPECT_TRUE( | 107 EXPECT_TRUE(WebRequestPermissions::HideRequest( |
106 WebRequestPermissions::HideRequest(extension_info_map_.get(), &request)) | 108 extension_info_map_.get(), request.get())) << sensitive_urls[i]; |
107 << sensitive_urls[i]; | |
108 } | 109 } |
109 // Check that requests are accepted if they don't touch sensitive urls. | 110 // Check that requests are accepted if they don't touch sensitive urls. |
110 for (size_t i = 0; i < arraysize(non_sensitive_urls); ++i) { | 111 for (size_t i = 0; i < arraysize(non_sensitive_urls); ++i) { |
111 GURL non_sensitive_url(non_sensitive_urls[i]); | 112 GURL non_sensitive_url(non_sensitive_urls[i]); |
112 net::TestURLRequest request( | 113 scoped_ptr<net::URLRequest> request(context.CreateRequest( |
113 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, &context); | 114 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, NULL)); |
114 EXPECT_FALSE( | 115 EXPECT_FALSE(WebRequestPermissions::HideRequest( |
115 WebRequestPermissions::HideRequest(extension_info_map_.get(), &request)) | 116 extension_info_map_.get(), request.get())) << non_sensitive_urls[i]; |
116 << non_sensitive_urls[i]; | |
117 } | 117 } |
118 | 118 |
119 // Check protection of requests originating from the frame showing the Chrome | 119 // Check protection of requests originating from the frame showing the Chrome |
120 // WebStore. | 120 // WebStore. |
121 // Normally this request is not protected: | 121 // Normally this request is not protected: |
122 GURL non_sensitive_url("http://www.google.com/test.js"); | 122 GURL non_sensitive_url("http://www.google.com/test.js"); |
123 net::TestURLRequest non_sensitive_request( | 123 scoped_ptr<net::URLRequest> non_sensitive_request(context.CreateRequest( |
124 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, &context); | 124 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, NULL)); |
125 EXPECT_FALSE(WebRequestPermissions::HideRequest(extension_info_map_.get(), | 125 EXPECT_FALSE(WebRequestPermissions::HideRequest( |
126 &non_sensitive_request)); | 126 extension_info_map_.get(), non_sensitive_request.get())); |
127 // If the origin is labeled by the WebStoreAppId, it becomes protected. | 127 // If the origin is labeled by the WebStoreAppId, it becomes protected. |
128 { | 128 { |
129 int process_id = 42; | 129 int process_id = 42; |
130 int site_instance_id = 23; | 130 int site_instance_id = 23; |
131 int view_id = 17; | 131 int view_id = 17; |
132 net::TestURLRequest sensitive_request( | 132 scoped_ptr<net::URLRequest> sensitive_request(context.CreateRequest( |
133 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, &context); | 133 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, NULL)); |
134 ResourceRequestInfo::AllocateForTesting(&sensitive_request, | 134 ResourceRequestInfo::AllocateForTesting(sensitive_request.get(), |
135 content::RESOURCE_TYPE_SCRIPT, | 135 content::RESOURCE_TYPE_SCRIPT, |
136 NULL, | 136 NULL, |
137 process_id, | 137 process_id, |
138 view_id, | 138 view_id, |
139 MSG_ROUTING_NONE, | 139 MSG_ROUTING_NONE, |
140 false); | 140 false); |
141 extension_info_map_->RegisterExtensionProcess( | 141 extension_info_map_->RegisterExtensionProcess( |
142 extension_misc::kWebStoreAppId, process_id, site_instance_id); | 142 extension_misc::kWebStoreAppId, process_id, site_instance_id); |
143 EXPECT_TRUE(WebRequestPermissions::HideRequest(extension_info_map_.get(), | 143 EXPECT_TRUE(WebRequestPermissions::HideRequest( |
144 &sensitive_request)); | 144 extension_info_map_.get(), sensitive_request.get())); |
145 } | 145 } |
146 // If the process is the signin process, it becomes protected. | 146 // If the process is the signin process, it becomes protected. |
147 { | 147 { |
148 int process_id = kSigninProcessId; | 148 int process_id = kSigninProcessId; |
149 int view_id = 19; | 149 int view_id = 19; |
150 net::TestURLRequest sensitive_request( | 150 scoped_ptr<net::URLRequest> sensitive_request(context.CreateRequest( |
151 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, &context); | 151 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, NULL)); |
152 ResourceRequestInfo::AllocateForTesting(&sensitive_request, | 152 ResourceRequestInfo::AllocateForTesting(sensitive_request.get(), |
153 content::RESOURCE_TYPE_SCRIPT, | 153 content::RESOURCE_TYPE_SCRIPT, |
154 NULL, | 154 NULL, |
155 process_id, | 155 process_id, |
156 view_id, | 156 view_id, |
157 MSG_ROUTING_NONE, | 157 MSG_ROUTING_NONE, |
158 false); | 158 false); |
159 EXPECT_TRUE(WebRequestPermissions::HideRequest(extension_info_map_.get(), | 159 EXPECT_TRUE(WebRequestPermissions::HideRequest( |
160 &sensitive_request)); | 160 extension_info_map_.get(), sensitive_request.get())); |
161 } | 161 } |
162 } | 162 } |
163 | 163 |
164 TEST_F(ExtensionWebRequestHelpersTestWithThreadsTest, | 164 TEST_F(ExtensionWebRequestHelpersTestWithThreadsTest, |
165 TestCanExtensionAccessURL_HostPermissions) { | 165 TestCanExtensionAccessURL_HostPermissions) { |
166 net::TestURLRequest request( | 166 scoped_ptr<net::URLRequest> request(context.CreateRequest( |
167 GURL("http://example.com"), net::DEFAULT_PRIORITY, NULL, &context); | 167 GURL("http://example.com"), net::DEFAULT_PRIORITY, NULL, NULL)); |
168 | 168 |
169 EXPECT_TRUE(WebRequestPermissions::CanExtensionAccessURL( | 169 EXPECT_TRUE(WebRequestPermissions::CanExtensionAccessURL( |
170 extension_info_map_.get(), | 170 extension_info_map_.get(), |
171 permissionless_extension_->id(), | 171 permissionless_extension_->id(), |
172 request.url(), | 172 request->url(), |
173 false /*crosses_incognito*/, | 173 false /*crosses_incognito*/, |
174 WebRequestPermissions::DO_NOT_CHECK_HOST)); | 174 WebRequestPermissions::DO_NOT_CHECK_HOST)); |
175 EXPECT_FALSE(WebRequestPermissions::CanExtensionAccessURL( | 175 EXPECT_FALSE(WebRequestPermissions::CanExtensionAccessURL( |
176 extension_info_map_.get(), | 176 extension_info_map_.get(), |
177 permissionless_extension_->id(), | 177 permissionless_extension_->id(), |
178 request.url(), | 178 request->url(), |
179 false /*crosses_incognito*/, | 179 false /*crosses_incognito*/, |
180 WebRequestPermissions::REQUIRE_HOST_PERMISSION)); | 180 WebRequestPermissions::REQUIRE_HOST_PERMISSION)); |
181 EXPECT_TRUE(WebRequestPermissions::CanExtensionAccessURL( | 181 EXPECT_TRUE(WebRequestPermissions::CanExtensionAccessURL( |
182 extension_info_map_.get(), | 182 extension_info_map_.get(), |
183 com_extension_->id(), | 183 com_extension_->id(), |
184 request.url(), | 184 request->url(), |
185 false /*crosses_incognito*/, | 185 false /*crosses_incognito*/, |
186 WebRequestPermissions::REQUIRE_HOST_PERMISSION)); | 186 WebRequestPermissions::REQUIRE_HOST_PERMISSION)); |
187 EXPECT_FALSE(WebRequestPermissions::CanExtensionAccessURL( | 187 EXPECT_FALSE(WebRequestPermissions::CanExtensionAccessURL( |
188 extension_info_map_.get(), | 188 extension_info_map_.get(), |
189 com_extension_->id(), | 189 com_extension_->id(), |
190 request.url(), | 190 request->url(), |
191 false /*crosses_incognito*/, | 191 false /*crosses_incognito*/, |
192 WebRequestPermissions::REQUIRE_ALL_URLS)); | 192 WebRequestPermissions::REQUIRE_ALL_URLS)); |
193 } | 193 } |
OLD | NEW |