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

Side by Side Diff: android_webview/browser/permission/permission_request_handler_unittest.cc

Issue 2863233002: [WebView] Move files from native to browser (Closed)
Patch Set: Created 3 years, 7 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "android_webview/native/permission/permission_request_handler.h" 5 #include "android_webview/browser/permission/permission_request_handler.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "android_webview/native/permission/aw_permission_request.h" 9 #include "android_webview/browser/permission/aw_permission_request.h"
10 #include "android_webview/native/permission/aw_permission_request_delegate.h" 10 #include "android_webview/browser/permission/aw_permission_request_delegate.h"
11 #include "android_webview/native/permission/permission_request_handler_client.h" 11 #include "android_webview/browser/permission/permission_request_handler_client.h "
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/callback.h" 13 #include "base/callback.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 namespace android_webview { 16 namespace android_webview {
17 17
18 class TestAwPermissionRequestDelegate : public AwPermissionRequestDelegate { 18 class TestAwPermissionRequestDelegate : public AwPermissionRequestDelegate {
19 public: 19 public:
20 TestAwPermissionRequestDelegate(const GURL& origin, 20 TestAwPermissionRequestDelegate(const GURL& origin,
21 int64_t resources, 21 int64_t resources,
22 base::Callback<void(bool)> callback) 22 base::Callback<void(bool)> callback)
23 : origin_(origin), resources_(resources), callback_(callback) {} 23 : origin_(origin), resources_(resources), callback_(callback) {}
24 24
25 // Get the origin which initiated the permission request. 25 // Get the origin which initiated the permission request.
26 const GURL& GetOrigin() override { return origin_; } 26 const GURL& GetOrigin() override { return origin_; }
27 27
28 // Get the resources the origin wanted to access. 28 // Get the resources the origin wanted to access.
29 int64_t GetResources() override { return resources_; } 29 int64_t GetResources() override { return resources_; }
30 30
31 // Notify the permission request is allowed or not. 31 // Notify the permission request is allowed or not.
32 void NotifyRequestResult(bool allowed) override { callback_.Run(allowed); } 32 void NotifyRequestResult(bool allowed) override { callback_.Run(allowed); }
33 33
34 private: 34 private:
35 GURL origin_; 35 GURL origin_;
36 int64_t resources_; 36 int64_t resources_;
37 base::Callback<void(bool)> callback_; 37 base::Callback<void(bool)> callback_;
38 }; 38 };
39 39
40 class TestPermissionRequestHandlerClient : 40 class TestPermissionRequestHandlerClient
41 public PermissionRequestHandlerClient { 41 : public PermissionRequestHandlerClient {
42 public: 42 public:
43 struct Permission { 43 struct Permission {
44 Permission() 44 Permission() : resources(0) {}
45 :resources(0) {}
46 Permission(const GURL& origin, int64_t resources) 45 Permission(const GURL& origin, int64_t resources)
47 : origin(origin), resources(resources) {} 46 : origin(origin), resources(resources) {}
48 GURL origin; 47 GURL origin;
49 int64_t resources; 48 int64_t resources;
50 }; 49 };
51 50
52 TestPermissionRequestHandlerClient() 51 TestPermissionRequestHandlerClient() : request_(NULL) {}
53 : request_(NULL) {}
54 52
55 void OnPermissionRequest( 53 void OnPermissionRequest(base::android::ScopedJavaLocalRef<jobject> j_request,
56 base::android::ScopedJavaLocalRef<jobject> j_request, 54 AwPermissionRequest* request) override {
57 AwPermissionRequest* request) override {
58 DCHECK(request); 55 DCHECK(request);
59 request_ = request; 56 request_ = request;
60 java_request_ = j_request; 57 java_request_ = j_request;
61 requested_permission_ = 58 requested_permission_ =
62 Permission(request->GetOrigin(), request->GetResources()); 59 Permission(request->GetOrigin(), request->GetResources());
63 } 60 }
64 61
65 void OnPermissionRequestCanceled(AwPermissionRequest* request) override { 62 void OnPermissionRequestCanceled(AwPermissionRequest* request) override {
66 canceled_permission_ = 63 canceled_permission_ =
67 Permission(request->GetOrigin(), request->GetResources()); 64 Permission(request->GetOrigin(), request->GetResources());
68 } 65 }
69 66
70 AwPermissionRequest* request() { 67 AwPermissionRequest* request() { return request_; }
71 return request_;
72 }
73 68
74 const Permission& requested_permission() { 69 const Permission& requested_permission() { return requested_permission_; }
75 return requested_permission_;
76 }
77 70
78 const Permission& canceled_permission() { 71 const Permission& canceled_permission() { return canceled_permission_; }
79 return canceled_permission_;
80 }
81 72
82 void Grant() { 73 void Grant() {
83 request_->OnAccept(NULL, NULL, true); 74 request_->OnAccept(NULL, NULL, true);
84 request_->DeleteThis(); 75 request_->DeleteThis();
85 request_ = NULL; 76 request_ = NULL;
86 } 77 }
87 78
88 void Deny() { 79 void Deny() {
89 request_->OnAccept(NULL, NULL, false); 80 request_->OnAccept(NULL, NULL, false);
90 request_->DeleteThis(); 81 request_->DeleteThis();
91 request_ = NULL; 82 request_ = NULL;
92 } 83 }
93 84
94 void Reset() { 85 void Reset() {
95 request_ = NULL; 86 request_ = NULL;
96 requested_permission_ = Permission(); 87 requested_permission_ = Permission();
97 canceled_permission_ = Permission(); 88 canceled_permission_ = Permission();
98 } 89 }
99 90
100 private: 91 private:
101 base::android::ScopedJavaLocalRef<jobject> java_request_; 92 base::android::ScopedJavaLocalRef<jobject> java_request_;
102 AwPermissionRequest* request_; 93 AwPermissionRequest* request_;
103 Permission requested_permission_; 94 Permission requested_permission_;
104 Permission canceled_permission_; 95 Permission canceled_permission_;
105 }; 96 };
106 97
107 class TestPermissionRequestHandler : public PermissionRequestHandler { 98 class TestPermissionRequestHandler : public PermissionRequestHandler {
108 public: 99 public:
109 TestPermissionRequestHandler(PermissionRequestHandlerClient* client) 100 TestPermissionRequestHandler(PermissionRequestHandlerClient* client)
110 : PermissionRequestHandler(client, NULL) { 101 : PermissionRequestHandler(client, NULL) {}
111 }
112 102
113 const std::vector<base::WeakPtr<AwPermissionRequest> > requests() { 103 const std::vector<base::WeakPtr<AwPermissionRequest>> requests() {
114 return requests_; 104 return requests_;
115 } 105 }
116 106
117 void PruneRequests() { 107 void PruneRequests() { return PermissionRequestHandler::PruneRequests(); }
118 return PermissionRequestHandler::PruneRequests();
119 }
120 }; 108 };
121 109
122 class PermissionRequestHandlerTest : public testing::Test { 110 class PermissionRequestHandlerTest : public testing::Test {
123 public: 111 public:
124 PermissionRequestHandlerTest() 112 PermissionRequestHandlerTest() : handler_(&client_), allowed_(false) {}
125 : handler_(&client_),
126 allowed_(false) {}
127 113
128 void NotifyRequestResult(bool allowed) { 114 void NotifyRequestResult(bool allowed) { allowed_ = allowed; }
129 allowed_ = allowed;
130 }
131 115
132 protected: 116 protected:
133 void SetUp() override { 117 void SetUp() override {
134 testing::Test::SetUp(); 118 testing::Test::SetUp();
135 origin_ = GURL("http://www.google.com"); 119 origin_ = GURL("http://www.google.com");
136 resources_ = 120 resources_ =
137 AwPermissionRequest::VideoCapture | AwPermissionRequest::AudioCapture; 121 AwPermissionRequest::VideoCapture | AwPermissionRequest::AudioCapture;
138 delegate_.reset( 122 delegate_.reset(new TestAwPermissionRequestDelegate(
139 new TestAwPermissionRequestDelegate( 123 origin_, resources_,
140 origin_, resources_, base::Bind( 124 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult,
141 &PermissionRequestHandlerTest::NotifyRequestResult, 125 base::Unretained(this))));
142 base::Unretained(this))));
143 } 126 }
144 127
145 const GURL& origin() { 128 const GURL& origin() { return origin_; }
146 return origin_;
147 }
148 129
149 int64_t resources() { return resources_; } 130 int64_t resources() { return resources_; }
150 131
151 std::unique_ptr<AwPermissionRequestDelegate> delegate() { 132 std::unique_ptr<AwPermissionRequestDelegate> delegate() {
152 return std::move(delegate_); 133 return std::move(delegate_);
153 } 134 }
154 135
155 TestPermissionRequestHandler* handler() { 136 TestPermissionRequestHandler* handler() { return &handler_; }
156 return &handler_;
157 }
158 137
159 TestPermissionRequestHandlerClient* client() { 138 TestPermissionRequestHandlerClient* client() { return &client_; }
160 return &client_;
161 }
162 139
163 bool allowed() { 140 bool allowed() { return allowed_; }
164 return allowed_;
165 }
166 141
167 private: 142 private:
168 GURL origin_; 143 GURL origin_;
169 int64_t resources_; 144 int64_t resources_;
170 std::unique_ptr<AwPermissionRequestDelegate> delegate_; 145 std::unique_ptr<AwPermissionRequestDelegate> delegate_;
171 TestPermissionRequestHandlerClient client_; 146 TestPermissionRequestHandlerClient client_;
172 TestPermissionRequestHandler handler_; 147 TestPermissionRequestHandler handler_;
173 bool allowed_; 148 bool allowed_;
174 }; 149 };
175 150
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 ASSERT_EQ(2u, handler()->requests().size()); 214 ASSERT_EQ(2u, handler()->requests().size());
240 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); 215 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
241 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); 216 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
242 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin()); 217 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin());
243 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources()); 218 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources());
244 // Verify client's onPermissionRequest was called 219 // Verify client's onPermissionRequest was called
245 EXPECT_EQ(origin1, client()->request()->GetOrigin()); 220 EXPECT_EQ(origin1, client()->request()->GetOrigin());
246 EXPECT_EQ(resources1, client()->request()->GetResources()); 221 EXPECT_EQ(resources1, client()->request()->GetResources());
247 222
248 // Send 3rd request which has same origin and resources as first one. 223 // Send 3rd request which has same origin and resources as first one.
249 delegate1.reset(new TestAwPermissionRequestDelegate(origin(), resources(), 224 delegate1.reset(new TestAwPermissionRequestDelegate(
225 origin(), resources(),
250 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, 226 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult,
251 base::Unretained(this)))); 227 base::Unretained(this))));
252 handler()->SendRequest(std::move(delegate1)); 228 handler()->SendRequest(std::move(delegate1));
253 // Verify Handler store the request correctly. 229 // Verify Handler store the request correctly.
254 ASSERT_EQ(3u, handler()->requests().size()); 230 ASSERT_EQ(3u, handler()->requests().size());
255 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); 231 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
256 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); 232 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
257 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin()); 233 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin());
258 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources()); 234 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources());
259 EXPECT_EQ(origin(), handler()->requests()[2]->GetOrigin()); 235 EXPECT_EQ(origin(), handler()->requests()[2]->GetOrigin());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 client()->Reset(); 268 client()->Reset();
293 handler()->SendRequest(std::move(delegate)); 269 handler()->SendRequest(std::move(delegate));
294 EXPECT_TRUE(allowed()); 270 EXPECT_TRUE(allowed());
295 EXPECT_EQ(NULL, client()->request()); 271 EXPECT_EQ(NULL, client()->request());
296 } 272 }
297 273
298 TEST_F(PermissionRequestHandlerTest, TestOriginNotPreauthorized) { 274 TEST_F(PermissionRequestHandlerTest, TestOriginNotPreauthorized) {
299 handler()->PreauthorizePermission(origin(), resources()); 275 handler()->PreauthorizePermission(origin(), resources());
300 276
301 // Ask the origin which wasn't preauthorized. 277 // Ask the origin which wasn't preauthorized.
302 GURL origin ("http://a.google.com/a/b"); 278 GURL origin("http://a.google.com/a/b");
303 std::unique_ptr<AwPermissionRequestDelegate> delegate; 279 std::unique_ptr<AwPermissionRequestDelegate> delegate;
304 int64_t requested_resources = AwPermissionRequest::AudioCapture; 280 int64_t requested_resources = AwPermissionRequest::AudioCapture;
305 delegate.reset(new TestAwPermissionRequestDelegate( 281 delegate.reset(new TestAwPermissionRequestDelegate(
306 origin, requested_resources, 282 origin, requested_resources,
307 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, 283 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult,
308 base::Unretained(this)))); 284 base::Unretained(this))));
309 handler()->SendRequest(std::move(delegate)); 285 handler()->SendRequest(std::move(delegate));
310 EXPECT_EQ(origin, handler()->requests()[0]->GetOrigin()); 286 EXPECT_EQ(origin, handler()->requests()[0]->GetOrigin());
311 EXPECT_EQ(requested_resources, handler()->requests()[0]->GetResources()); 287 EXPECT_EQ(requested_resources, handler()->requests()[0]->GetResources());
312 client()->Grant(); 288 client()->Grant();
(...skipping 15 matching lines...) Expand all
328 handler()->SendRequest(std::move(delegate)); 304 handler()->SendRequest(std::move(delegate));
329 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); 305 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
330 EXPECT_EQ(requested_resources, handler()->requests()[0]->GetResources()); 306 EXPECT_EQ(requested_resources, handler()->requests()[0]->GetResources());
331 client()->Deny(); 307 client()->Deny();
332 EXPECT_FALSE(allowed()); 308 EXPECT_FALSE(allowed());
333 } 309 }
334 310
335 TEST_F(PermissionRequestHandlerTest, TestPreauthorizeMultiplePermission) { 311 TEST_F(PermissionRequestHandlerTest, TestPreauthorizeMultiplePermission) {
336 handler()->PreauthorizePermission(origin(), resources()); 312 handler()->PreauthorizePermission(origin(), resources());
337 // Preauthorize another permission. 313 // Preauthorize another permission.
338 GURL origin ("http://a.google.com/a/b"); 314 GURL origin("http://a.google.com/a/b");
339 handler()->PreauthorizePermission(origin, AwPermissionRequest::Geolocation); 315 handler()->PreauthorizePermission(origin, AwPermissionRequest::Geolocation);
340 GURL origin_hostname ("http://a.google.com/"); 316 GURL origin_hostname("http://a.google.com/");
341 std::unique_ptr<AwPermissionRequestDelegate> delegate; 317 std::unique_ptr<AwPermissionRequestDelegate> delegate;
342 delegate.reset(new TestAwPermissionRequestDelegate( 318 delegate.reset(new TestAwPermissionRequestDelegate(
343 origin_hostname, AwPermissionRequest::Geolocation, 319 origin_hostname, AwPermissionRequest::Geolocation,
344 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, 320 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult,
345 base::Unretained(this)))); 321 base::Unretained(this))));
346 handler()->SendRequest(std::move(delegate)); 322 handler()->SendRequest(std::move(delegate));
347 EXPECT_TRUE(allowed()); 323 EXPECT_TRUE(allowed());
348 EXPECT_EQ(NULL, client()->request()); 324 EXPECT_EQ(NULL, client()->request());
349 } 325 }
350 326
351 } // android_webview 327 } // android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698