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

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

Issue 239793002: Handle media access permission request (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix error, landed it again Created 6 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "android_webview/native/permission/aw_permission_request.h"
6 #include "android_webview/native/permission/aw_permission_request_delegate.h"
7 #include "android_webview/native/permission/permission_request_handler.h"
8 #include "android_webview/native/permission/permission_request_handler_client.h"
9 #include "base/bind.h"
10 #include "base/callback.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace android_webview {
14
15 class TestAwPermissionRequestDelegate : public AwPermissionRequestDelegate {
16 public:
17 TestAwPermissionRequestDelegate(
18 const GURL& origin, int64 resources, base::Callback<void(bool)> callback)
19 : origin_(origin),
20 resources_(resources),
21 callback_(callback) {}
22
23 // Get the origin which initiated the permission request.
24 virtual const GURL& GetOrigin() OVERRIDE {
25 return origin_;
26 }
27
28 // Get the resources the origin wanted to access.
29 virtual int64 GetResources() OVERRIDE {
30 return resources_;
31 }
32
33 // Notify the permission request is allowed or not.
34 virtual void NotifyRequestResult(bool allowed) OVERRIDE {
35 callback_.Run(allowed);
36 }
37
38 private:
39 GURL origin_;
40 int64 resources_;
41 base::Callback<void(bool)> callback_;
42 };
43
44 class TestPermissionRequestHandlerClient :
45 public PermissionRequestHandlerClient {
46 public:
47 struct Permission {
48 Permission()
49 :resources(0) {}
50 Permission(const GURL& origin, int64 resources)
51 : origin(origin),
52 resources(resources) {}
53 GURL origin;
54 int64 resources;
55 };
56
57 virtual void OnPermissionRequest(AwPermissionRequest* request) OVERRIDE {
58 request_ = request;
59 requested_permission_ =
60 Permission(request->GetOrigin(), request->GetResources());
61 }
62
63 virtual void OnPermissionRequestCanceled(
64 AwPermissionRequest* request) OVERRIDE{
65 canceled_permission_ =
66 Permission(request->GetOrigin(), request->GetResources());
67 }
68
69 AwPermissionRequest* request() {
70 return request_;
71 }
72
73 const Permission& requested_permission() {
74 return requested_permission_;
75 }
76
77 const Permission& canceled_permission() {
78 return canceled_permission_;
79 }
80
81 void Grant() {
82 request_->OnAccept(NULL, NULL, true);
83 request_ = NULL;
84 }
85
86 void Deny() {
87 request_->OnAccept(NULL, NULL, false);
88 request_ = NULL;
89 }
90
91 private:
92 AwPermissionRequest* request_;
93 Permission requested_permission_;
94 Permission canceled_permission_;
95 };
96
97 class TestPermissionRequestHandler : public PermissionRequestHandler {
98 public:
99 TestPermissionRequestHandler(PermissionRequestHandlerClient* client)
100 : PermissionRequestHandler(client) {
101 }
102
103 const std::vector<base::WeakPtr<AwPermissionRequest> > requests() {
104 return requests_;
105 }
106
107 void PruneRequests() {
108 return PermissionRequestHandler::PruneRequests();
109 }
110 };
111
112 class PermissionRequestHandlerTest : public testing::Test {
113 public:
114 PermissionRequestHandlerTest()
115 : handler_(&client_),
116 allowed_(false) {}
117
118 void NotifyRequestResult(bool allowed) {
119 allowed_ = allowed;
120 }
121
122 protected:
123 virtual void SetUp() OVERRIDE {
124 testing::Test::SetUp();
125 origin_ = GURL("http://www.google.com");
126 resources_ =
127 AwPermissionRequest::VideoCapture | AwPermissionRequest::AudioCapture;
128 delegate_.reset(
129 new TestAwPermissionRequestDelegate(
130 origin_, resources_, base::Bind(
131 &PermissionRequestHandlerTest::NotifyRequestResult,
132 base::Unretained(this))));
133 }
134
135 const GURL& origin() {
136 return origin_;
137 }
138
139 int64 resources() {
140 return resources_;
141 }
142
143 scoped_ptr<AwPermissionRequestDelegate> delegate() {
144 return delegate_.Pass();
145 }
146
147 TestPermissionRequestHandler* handler() {
148 return &handler_;
149 }
150
151 TestPermissionRequestHandlerClient* client() {
152 return &client_;
153 }
154
155 bool allowed() {
156 return allowed_;
157 }
158
159 private:
160 GURL origin_;
161 int64 resources_;
162 scoped_ptr<AwPermissionRequestDelegate> delegate_;
163 TestPermissionRequestHandlerClient client_;
164 TestPermissionRequestHandler handler_;
165 bool allowed_;
166 };
167
168 TEST_F(PermissionRequestHandlerTest, TestPermissionGranted) {
169 handler()->SendRequest(delegate().Pass());
170 // Verify Handler store the request correctly.
171 ASSERT_EQ(1u, handler()->requests().size());
172 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
173 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
174
175 // Verify client's onPermissionRequest was called
176 EXPECT_EQ(origin(), client()->request()->GetOrigin());
177 EXPECT_EQ(resources(), client()->request()->GetResources());
178
179 // Simulate the grant request.
180 client()->Grant();
181 // Verify the request is notified as granted
182 EXPECT_TRUE(allowed());
183 handler()->PruneRequests();
184 // Verify the weak reference in handler was removed.
185 EXPECT_TRUE(handler()->requests().empty());
186 }
187
188 TEST_F(PermissionRequestHandlerTest, TestPermissionDenied) {
189 handler()->SendRequest(delegate().Pass());
190 // Verify Handler store the request correctly.
191 ASSERT_EQ(1u, handler()->requests().size());
192 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
193 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
194
195 // Verify client's onPermissionRequest was called
196 EXPECT_EQ(origin(), client()->request()->GetOrigin());
197 EXPECT_EQ(resources(), client()->request()->GetResources());
198
199 // Simulate the deny request.
200 client()->Deny();
201 // Verify the request is notified as granted
202 EXPECT_FALSE(allowed());
203 handler()->PruneRequests();
204 // Verify the weak reference in handler was removed.
205 EXPECT_TRUE(handler()->requests().empty());
206 }
207
208 TEST_F(PermissionRequestHandlerTest, TestMultiplePermissionRequest) {
209 GURL origin1 = GURL("http://a.google.com");
210 int64 resources1 = AwPermissionRequest::Geolocation;
211
212 scoped_ptr<AwPermissionRequestDelegate> delegate1;
213 delegate1.reset(new TestAwPermissionRequestDelegate(
214 origin1, resources1,
215 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult,
216 base::Unretained(this))));
217
218 // Send 1st request
219 handler()->SendRequest(delegate().Pass());
220 // Verify Handler store the request correctly.
221 ASSERT_EQ(1u, handler()->requests().size());
222 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
223 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
224 // Verify client's onPermissionRequest was called
225 EXPECT_EQ(origin(), client()->request()->GetOrigin());
226 EXPECT_EQ(resources(), client()->request()->GetResources());
227
228 // Send 2nd request
229 handler()->SendRequest(delegate1.Pass());
230 // Verify Handler store the request correctly.
231 ASSERT_EQ(2u, handler()->requests().size());
232 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
233 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
234 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin());
235 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources());
236 // Verify client's onPermissionRequest was called
237 EXPECT_EQ(origin1, client()->request()->GetOrigin());
238 EXPECT_EQ(resources1, client()->request()->GetResources());
239
240 // Send 3rd request which has same origin and resources as first one.
241 delegate1.reset(new TestAwPermissionRequestDelegate(origin(), resources(),
242 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult,
243 base::Unretained(this))));
244 handler()->SendRequest(delegate1.Pass());
245 // Verify Handler store the request correctly.
246 ASSERT_EQ(3u, handler()->requests().size());
247 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
248 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
249 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin());
250 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources());
251 EXPECT_EQ(origin(), handler()->requests()[2]->GetOrigin());
252 EXPECT_EQ(resources(), handler()->requests()[2]->GetResources());
253 // Verify client's onPermissionRequest was called
254 EXPECT_EQ(origin(), client()->request()->GetOrigin());
255 EXPECT_EQ(resources(), client()->request()->GetResources());
256
257 // Cancel the request.
258 handler()->CancelRequest(origin(), resources());
259 // Verify client's OnPermissionRequestCancled() was called.
260 EXPECT_EQ(origin(), client()->canceled_permission().origin);
261 EXPECT_EQ(resources(), client()->canceled_permission().resources);
262 // Verify Handler store the request correctly, the 1st and 3rd were removed.
263 handler()->PruneRequests();
264 ASSERT_EQ(1u, handler()->requests().size());
265 EXPECT_EQ(origin1, handler()->requests()[0]->GetOrigin());
266 EXPECT_EQ(resources1, handler()->requests()[0]->GetResources());
267 }
268
269 } // android_webview
OLDNEW
« no previous file with comments | « android_webview/native/permission/permission_request_handler_client.cc ('k') | android_webview/native/webview_native.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698