Cast: Stop logging kVideoFrameSentToEncoder and rename a couple events.
[chromium-blink-merge.git] / chrome / browser / extensions / api / web_request / web_request_permissions_unittest.cc
blob9d7de4c0c653653f63ad648ebd3c47ccc430f63d
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
3 // found in the LICENSE file.
5 #include "chrome/browser/extensions/api/web_request/web_request_permissions.h"
7 #include "base/message_loop/message_loop.h"
8 #include "chrome/common/extensions/extension_constants.h"
9 #include "chrome/common/extensions/extension_test_util.h"
10 #include "chrome/test/base/testing_profile.h"
11 #include "content/public/browser/resource_request_info.h"
12 #include "content/public/test/test_browser_thread_bundle.h"
13 #include "extensions/browser/info_map.h"
14 #include "ipc/ipc_message.h"
15 #include "net/base/request_priority.h"
16 #include "net/url_request/url_request_test_util.h"
17 #include "testing/gtest/include/gtest/gtest.h"
19 using content::ResourceRequestInfo;
20 using extensions::Extension;
21 using extensions::Manifest;
22 using extension_test_util::LoadManifestUnchecked;
24 class ExtensionWebRequestHelpersTestWithThreadsTest : public testing::Test {
25 public:
26 ExtensionWebRequestHelpersTestWithThreadsTest()
27 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {}
29 protected:
30 virtual void SetUp() OVERRIDE;
32 protected:
33 net::TestURLRequestContext context;
35 // This extension has Web Request permissions, but no host permission.
36 scoped_refptr<Extension> permissionless_extension_;
37 // This extension has Web Request permissions, and *.com a host permission.
38 scoped_refptr<Extension> com_extension_;
39 scoped_refptr<extensions::InfoMap> extension_info_map_;
41 private:
42 content::TestBrowserThreadBundle thread_bundle_;
45 void ExtensionWebRequestHelpersTestWithThreadsTest::SetUp() {
46 testing::Test::SetUp();
48 std::string error;
49 permissionless_extension_ = LoadManifestUnchecked("permissions",
50 "web_request_no_host.json",
51 Manifest::INVALID_LOCATION,
52 Extension::NO_FLAGS,
53 "ext_id_1",
54 &error);
55 ASSERT_TRUE(permissionless_extension_.get()) << error;
56 com_extension_ =
57 LoadManifestUnchecked("permissions",
58 "web_request_com_host_permissions.json",
59 Manifest::INVALID_LOCATION,
60 Extension::NO_FLAGS,
61 "ext_id_2",
62 &error);
63 ASSERT_TRUE(com_extension_.get()) << error;
64 extension_info_map_ = new extensions::InfoMap;
65 extension_info_map_->AddExtension(permissionless_extension_.get(),
66 base::Time::Now(),
67 false /*incognito_enabled*/,
68 false /*notifications_disabled*/);
69 extension_info_map_->AddExtension(
70 com_extension_.get(),
71 base::Time::Now(),
72 false /*incognito_enabled*/,
73 false /*notifications_disabled*/);
76 TEST_F(ExtensionWebRequestHelpersTestWithThreadsTest, TestHideRequestForURL) {
77 net::TestURLRequestContext context;
78 const char* sensitive_urls[] = {
79 "http://clients2.google.com",
80 "http://clients22.google.com",
81 "https://clients2.google.com",
82 "http://clients2.google.com/service/update2/crx",
83 "https://clients.google.com",
84 "https://test.clients.google.com",
85 "https://clients2.google.com/service/update2/crx",
86 "http://www.gstatic.com/chrome/extensions/blacklist",
87 "https://www.gstatic.com/chrome/extensions/blacklist",
88 "notregisteredscheme://www.foobar.com",
89 "https://chrome.google.com/webstore/",
90 "https://chrome.google.com/webstore/"
91 "inlineinstall/detail/kcnhkahnjcbndmmehfkdnkjomaanaooo"
93 const char* non_sensitive_urls[] = {
94 "http://www.google.com/"
96 const int kSigninProcessId = 99;
97 extension_info_map_->SetSigninProcess(kSigninProcessId);
99 // Check that requests are rejected based on the destination
100 for (size_t i = 0; i < arraysize(sensitive_urls); ++i) {
101 GURL sensitive_url(sensitive_urls[i]);
102 net::TestURLRequest request(
103 sensitive_url, net::DEFAULT_PRIORITY, NULL, &context);
104 EXPECT_TRUE(
105 WebRequestPermissions::HideRequest(extension_info_map_.get(), &request))
106 << sensitive_urls[i];
108 // Check that requests are accepted if they don't touch sensitive urls.
109 for (size_t i = 0; i < arraysize(non_sensitive_urls); ++i) {
110 GURL non_sensitive_url(non_sensitive_urls[i]);
111 net::TestURLRequest request(
112 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, &context);
113 EXPECT_FALSE(
114 WebRequestPermissions::HideRequest(extension_info_map_.get(), &request))
115 << non_sensitive_urls[i];
118 // Check protection of requests originating from the frame showing the Chrome
119 // WebStore.
120 // Normally this request is not protected:
121 GURL non_sensitive_url("http://www.google.com/test.js");
122 net::TestURLRequest non_sensitive_request(
123 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, &context);
124 EXPECT_FALSE(WebRequestPermissions::HideRequest(extension_info_map_.get(),
125 &non_sensitive_request));
126 // If the origin is labeled by the WebStoreAppId, it becomes protected.
128 int process_id = 42;
129 int site_instance_id = 23;
130 int view_id = 17;
131 net::TestURLRequest sensitive_request(
132 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, &context);
133 ResourceRequestInfo::AllocateForTesting(
134 &sensitive_request, ResourceType::SCRIPT, NULL,
135 process_id, view_id, MSG_ROUTING_NONE, false);
136 extension_info_map_->RegisterExtensionProcess(
137 extension_misc::kWebStoreAppId, process_id, site_instance_id);
138 EXPECT_TRUE(WebRequestPermissions::HideRequest(extension_info_map_.get(),
139 &sensitive_request));
141 // If the process is the signin process, it becomes protected.
143 int process_id = kSigninProcessId;
144 int view_id = 19;
145 net::TestURLRequest sensitive_request(
146 non_sensitive_url, net::DEFAULT_PRIORITY, NULL, &context);
147 ResourceRequestInfo::AllocateForTesting(
148 &sensitive_request, ResourceType::SCRIPT, NULL,
149 process_id, view_id, MSG_ROUTING_NONE, false);
150 EXPECT_TRUE(WebRequestPermissions::HideRequest(extension_info_map_.get(),
151 &sensitive_request));
155 TEST_F(ExtensionWebRequestHelpersTestWithThreadsTest,
156 TestCanExtensionAccessURL_HostPermissions) {
157 net::TestURLRequest request(
158 GURL("http://example.com"), net::DEFAULT_PRIORITY, NULL, &context);
160 EXPECT_TRUE(WebRequestPermissions::CanExtensionAccessURL(
161 extension_info_map_.get(),
162 permissionless_extension_->id(),
163 request.url(),
164 false /*crosses_incognito*/,
165 WebRequestPermissions::DO_NOT_CHECK_HOST));
166 EXPECT_FALSE(WebRequestPermissions::CanExtensionAccessURL(
167 extension_info_map_.get(),
168 permissionless_extension_->id(),
169 request.url(),
170 false /*crosses_incognito*/,
171 WebRequestPermissions::REQUIRE_HOST_PERMISSION));
172 EXPECT_TRUE(WebRequestPermissions::CanExtensionAccessURL(
173 extension_info_map_.get(),
174 com_extension_->id(),
175 request.url(),
176 false /*crosses_incognito*/,
177 WebRequestPermissions::REQUIRE_HOST_PERMISSION));
178 EXPECT_FALSE(WebRequestPermissions::CanExtensionAccessURL(
179 extension_info_map_.get(),
180 com_extension_->id(),
181 request.url(),
182 false /*crosses_incognito*/,
183 WebRequestPermissions::REQUIRE_ALL_URLS));