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

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: addressed comments, added unittests Created 6 years, 8 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_delegate.h"
6 #include "android_webview/native/permission/permission_request_handler.h"
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace android_webview {
10
11 class TestAwPermissionRequestDelegate : public AwPermissionRequestDelegate {
mkosiba (inactive) 2014/04/23 18:07:38 sweet! thanks for adding these btw.
12 public:
13 TestAwPermissionRequestDelegate(const GURL& origin, int64 resources)
14 : origin_(origin),
15 resources_(resources),
16 allowed_(false) {}
17
18 // Get the origin which initiated the permission request.
19 virtual const GURL& GetOrigin() {
20 return origin_;
21 }
22
23 // Get the resources the origin wanted to access.
24 virtual int64 GetResources() {
25 return resources_;
26 }
27
28 // Notify the permission request is allowed or not.
29 virtual void NotifyRequestResult(bool allowed) {
30 allowed_ = allowed;
31 }
32
33 bool allowed() {
34 return allowed_;
35 }
36
37 private:
38 GURL origin_;
39 int64 resources_;
40 bool allowed_;
41 };
42
43 class TestAwPermissionRequest : public AwPermissionRequest {
44 public:
45 TestAwPermissionRequest(scoped_ptr<TestAwPermissionRequestDelegate> delegate)
46 : AwPermissionRequest(delegate.PassAs<AwPermissionRequestDelegate>()) {}
47
48 TestAwPermissionRequestDelegate* delegate() {
49 return static_cast<TestAwPermissionRequestDelegate*>(delegate_.get());
50 }
51 };
52
53 class TestPermissionRequestHandlerClient :
54 public PermissionRequestHandlerClient {
55 public:
56 virtual void OnPermissionRequest(scoped_refptr<AwPermissionRequest> request) {
57 request_ = request;
58 }
59
60 virtual void OnPermissionRequestCanceled(
61 scoped_refptr<AwPermissionRequest> request) {
62 canceled_request_ = request;
63 }
64
65 TestAwPermissionRequest* request() {
66 return static_cast<TestAwPermissionRequest*>(request_.get());
67 }
68
69 TestAwPermissionRequest* canceled_request() {
70 return static_cast<TestAwPermissionRequest*>(canceled_request_.get());
71 }
72
73 void Grant() {
74 request_->OnAccept(NULL, NULL, true);
75 }
76
77 void Deny() {
78 request_->OnAccept(NULL, NULL, false);
79 }
80
81 private:
82 scoped_refptr<AwPermissionRequest> request_;
83 scoped_refptr<AwPermissionRequest> canceled_request_;
84 };
85
86 class TestPermissionRequestHandler : public PermissionRequestHandler {
87 public:
88 TestPermissionRequestHandler(PermissionRequestHandlerClient* client)
89 : PermissionRequestHandler(client) {
90 }
91
92 const std::vector<scoped_refptr<AwPermissionRequest> > requests() {
93 return requests_;
94 }
95 };
96
97 class PermissionRequestHandlerTest : public testing::Test {
98 public:
99 PermissionRequestHandlerTest()
100 : handler_(&client_) {}
101
102 protected:
103 virtual void SetUp() OVERRIDE {
104 origin_ = GURL("http://www.google.com");
105 resources_ =
106 AwPermissionRequest::VideoCapture | AwPermissionRequest::AudioCapture;
107 scoped_ptr<TestAwPermissionRequestDelegate> delegate;
108 delegate.reset(
109 new TestAwPermissionRequestDelegate(origin_, resources_));
110 request_ = new TestAwPermissionRequest(delegate.Pass());
111 }
112
113 const GURL& origin() {
114 return origin_;
115 }
116
117 int64 resources() {
118 return resources_;
119 }
120
121 TestAwPermissionRequest* GetRequest() {
122 return static_cast<TestAwPermissionRequest*>(request_.get());
123 }
124
125 scoped_refptr<AwPermissionRequest> request() {
126 return request_;
127 }
128
129 TestPermissionRequestHandler* handler() {
130 return &handler_;
131 }
132
133 TestPermissionRequestHandlerClient* client() {
134 return &client_;
135 }
136
137 private:
138 GURL origin_;
139 int64 resources_;
140 scoped_refptr<AwPermissionRequest> request_;
141 TestPermissionRequestHandlerClient client_;
142 TestPermissionRequestHandler handler_;
143 };
144
145 TEST_F(PermissionRequestHandlerTest, TestPermissionGranted) {
146 handler()->SendRequest(request());
147 // Verify Handler store the request correctly.
148 ASSERT_EQ(1u, handler()->requests().size());
149 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
150 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
151
152 // Verify client's onPermissionRequest was called
153 EXPECT_EQ(origin(), client()->request()->GetOrigin());
154 EXPECT_EQ(resources(), client()->request()->GetResources());
155
156 // Simulate the grant request.
157 client()->Grant();
158 // Verify the request is notified as granted
159 EXPECT_TRUE(GetRequest()->delegate()->allowed());
160 // Verify Handler is notified and request is removed.
161 EXPECT_TRUE(handler()->requests().empty());
162 }
163
164 TEST_F(PermissionRequestHandlerTest, TestPermissionDenied) {
165 handler()->SendRequest(request());
166 // Verify Handler store the request correctly.
167 ASSERT_EQ(1u, handler()->requests().size());
168 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
169 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
170
171 // Verify client's onPermissionRequest was called
172 EXPECT_EQ(origin(), client()->request()->GetOrigin());
173 EXPECT_EQ(resources(), client()->request()->GetResources());
174
175 // Simulate the grant request.
176 client()->Deny();
177 // Verify the request is notified as denied
178 EXPECT_FALSE(GetRequest()->delegate()->allowed());
179 // Verify Handler is notified and request is removed.
180 EXPECT_TRUE(handler()->requests().empty());
181 }
182
183
184 TEST_F(PermissionRequestHandlerTest, TestMultiplePermissionRequest) {
185 GURL origin1 = GURL("http://a.google.com");
186 int64 resources1 = AwPermissionRequest::Geolocation;
187
188 scoped_ptr<TestAwPermissionRequestDelegate> delegate;
189 delegate.reset(new TestAwPermissionRequestDelegate(origin1, resources1));
190 scoped_refptr<TestAwPermissionRequest> request1 =
191 new TestAwPermissionRequest(delegate.Pass());
192
193 // Send 1st request
194 handler()->SendRequest(request());
195 // Verify Handler store the request correctly.
196 ASSERT_EQ(1u, handler()->requests().size());
197 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
198 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
199 // Verify client's onPermissionRequest was called
200 EXPECT_EQ(origin(), client()->request()->GetOrigin());
201 EXPECT_EQ(resources(), client()->request()->GetResources());
202
203 // Send 2nd request
204 handler()->SendRequest(request1);
205 // Verify Handler store the request correctly.
206 ASSERT_EQ(2u, handler()->requests().size());
207 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
208 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
209 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin());
210 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources());
211 // Verify client's onPermissionRequest was called
212 EXPECT_EQ(origin1, client()->request()->GetOrigin());
213 EXPECT_EQ(resources1, client()->request()->GetResources());
214
215 // Send 3rd request
216 handler()->SendRequest(request());
217 // Verify Handler store the request correctly.
218 ASSERT_EQ(3u, handler()->requests().size());
219 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
220 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
221 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin());
222 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources());
223 EXPECT_EQ(origin(), handler()->requests()[2]->GetOrigin());
224 EXPECT_EQ(resources(), handler()->requests()[2]->GetResources());
225 // Verify client's onPermissionRequest was called
226 EXPECT_EQ(origin(), client()->request()->GetOrigin());
227 EXPECT_EQ(resources(), client()->request()->GetResources());
228
229 // Cancel the request
230 handler()->CancelRequest(request()->GetOrigin(), request()->GetResources());
231 // Verify client's OnPermissionRequestCancled() was called.
232 EXPECT_EQ(origin(), client()->canceled_request()->GetOrigin());
233 EXPECT_EQ(resources(), client()->canceled_request()->GetResources());
234 // Verify Handler store the request correctly, the 1st and 3rd were removed.
235 ASSERT_EQ(1u, handler()->requests().size());
236 EXPECT_EQ(origin1, handler()->requests()[0]->GetOrigin());
237 EXPECT_EQ(resources1, handler()->requests()[0]->GetResources());
238 }
239
240 } // android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698