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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: android_webview/native/permission/permission_request_handler_unittest.cc
diff --git a/android_webview/native/permission/permission_request_handler_unittest.cc b/android_webview/native/permission/permission_request_handler_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..e56ef50e628cfdc9a6d53d0659df4f1ce955d0cc
--- /dev/null
+++ b/android_webview/native/permission/permission_request_handler_unittest.cc
@@ -0,0 +1,240 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "android_webview/native/permission/aw_permission_request_delegate.h"
+#include "android_webview/native/permission/permission_request_handler.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace android_webview {
+
+class TestAwPermissionRequestDelegate : public AwPermissionRequestDelegate {
mkosiba (inactive) 2014/04/23 18:07:38 sweet! thanks for adding these btw.
+ public:
+ TestAwPermissionRequestDelegate(const GURL& origin, int64 resources)
+ : origin_(origin),
+ resources_(resources),
+ allowed_(false) {}
+
+ // Get the origin which initiated the permission request.
+ virtual const GURL& GetOrigin() {
+ return origin_;
+ }
+
+ // Get the resources the origin wanted to access.
+ virtual int64 GetResources() {
+ return resources_;
+ }
+
+ // Notify the permission request is allowed or not.
+ virtual void NotifyRequestResult(bool allowed) {
+ allowed_ = allowed;
+ }
+
+ bool allowed() {
+ return allowed_;
+ }
+
+ private:
+ GURL origin_;
+ int64 resources_;
+ bool allowed_;
+};
+
+class TestAwPermissionRequest : public AwPermissionRequest {
+ public:
+ TestAwPermissionRequest(scoped_ptr<TestAwPermissionRequestDelegate> delegate)
+ : AwPermissionRequest(delegate.PassAs<AwPermissionRequestDelegate>()) {}
+
+ TestAwPermissionRequestDelegate* delegate() {
+ return static_cast<TestAwPermissionRequestDelegate*>(delegate_.get());
+ }
+};
+
+class TestPermissionRequestHandlerClient :
+ public PermissionRequestHandlerClient {
+ public:
+ virtual void OnPermissionRequest(scoped_refptr<AwPermissionRequest> request) {
+ request_ = request;
+ }
+
+ virtual void OnPermissionRequestCanceled(
+ scoped_refptr<AwPermissionRequest> request) {
+ canceled_request_ = request;
+ }
+
+ TestAwPermissionRequest* request() {
+ return static_cast<TestAwPermissionRequest*>(request_.get());
+ }
+
+ TestAwPermissionRequest* canceled_request() {
+ return static_cast<TestAwPermissionRequest*>(canceled_request_.get());
+ }
+
+ void Grant() {
+ request_->OnAccept(NULL, NULL, true);
+ }
+
+ void Deny() {
+ request_->OnAccept(NULL, NULL, false);
+ }
+
+ private:
+ scoped_refptr<AwPermissionRequest> request_;
+ scoped_refptr<AwPermissionRequest> canceled_request_;
+};
+
+class TestPermissionRequestHandler : public PermissionRequestHandler {
+ public:
+ TestPermissionRequestHandler(PermissionRequestHandlerClient* client)
+ : PermissionRequestHandler(client) {
+ }
+
+ const std::vector<scoped_refptr<AwPermissionRequest> > requests() {
+ return requests_;
+ }
+};
+
+class PermissionRequestHandlerTest : public testing::Test {
+ public:
+ PermissionRequestHandlerTest()
+ : handler_(&client_) {}
+
+ protected:
+ virtual void SetUp() OVERRIDE {
+ origin_ = GURL("http://www.google.com");
+ resources_ =
+ AwPermissionRequest::VideoCapture | AwPermissionRequest::AudioCapture;
+ scoped_ptr<TestAwPermissionRequestDelegate> delegate;
+ delegate.reset(
+ new TestAwPermissionRequestDelegate(origin_, resources_));
+ request_ = new TestAwPermissionRequest(delegate.Pass());
+ }
+
+ const GURL& origin() {
+ return origin_;
+ }
+
+ int64 resources() {
+ return resources_;
+ }
+
+ TestAwPermissionRequest* GetRequest() {
+ return static_cast<TestAwPermissionRequest*>(request_.get());
+ }
+
+ scoped_refptr<AwPermissionRequest> request() {
+ return request_;
+ }
+
+ TestPermissionRequestHandler* handler() {
+ return &handler_;
+ }
+
+ TestPermissionRequestHandlerClient* client() {
+ return &client_;
+ }
+
+ private:
+ GURL origin_;
+ int64 resources_;
+ scoped_refptr<AwPermissionRequest> request_;
+ TestPermissionRequestHandlerClient client_;
+ TestPermissionRequestHandler handler_;
+};
+
+TEST_F(PermissionRequestHandlerTest, TestPermissionGranted) {
+ handler()->SendRequest(request());
+ // Verify Handler store the request correctly.
+ ASSERT_EQ(1u, handler()->requests().size());
+ EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
+ EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
+
+ // Verify client's onPermissionRequest was called
+ EXPECT_EQ(origin(), client()->request()->GetOrigin());
+ EXPECT_EQ(resources(), client()->request()->GetResources());
+
+ // Simulate the grant request.
+ client()->Grant();
+ // Verify the request is notified as granted
+ EXPECT_TRUE(GetRequest()->delegate()->allowed());
+ // Verify Handler is notified and request is removed.
+ EXPECT_TRUE(handler()->requests().empty());
+}
+
+TEST_F(PermissionRequestHandlerTest, TestPermissionDenied) {
+ handler()->SendRequest(request());
+ // Verify Handler store the request correctly.
+ ASSERT_EQ(1u, handler()->requests().size());
+ EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
+ EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
+
+ // Verify client's onPermissionRequest was called
+ EXPECT_EQ(origin(), client()->request()->GetOrigin());
+ EXPECT_EQ(resources(), client()->request()->GetResources());
+
+ // Simulate the grant request.
+ client()->Deny();
+ // Verify the request is notified as denied
+ EXPECT_FALSE(GetRequest()->delegate()->allowed());
+ // Verify Handler is notified and request is removed.
+ EXPECT_TRUE(handler()->requests().empty());
+}
+
+
+TEST_F(PermissionRequestHandlerTest, TestMultiplePermissionRequest) {
+ GURL origin1 = GURL("http://a.google.com");
+ int64 resources1 = AwPermissionRequest::Geolocation;
+
+ scoped_ptr<TestAwPermissionRequestDelegate> delegate;
+ delegate.reset(new TestAwPermissionRequestDelegate(origin1, resources1));
+ scoped_refptr<TestAwPermissionRequest> request1 =
+ new TestAwPermissionRequest(delegate.Pass());
+
+ // Send 1st request
+ handler()->SendRequest(request());
+ // Verify Handler store the request correctly.
+ ASSERT_EQ(1u, handler()->requests().size());
+ EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
+ EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
+ // Verify client's onPermissionRequest was called
+ EXPECT_EQ(origin(), client()->request()->GetOrigin());
+ EXPECT_EQ(resources(), client()->request()->GetResources());
+
+ // Send 2nd request
+ handler()->SendRequest(request1);
+ // Verify Handler store the request correctly.
+ ASSERT_EQ(2u, handler()->requests().size());
+ EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
+ EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
+ EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin());
+ EXPECT_EQ(resources1, handler()->requests()[1]->GetResources());
+ // Verify client's onPermissionRequest was called
+ EXPECT_EQ(origin1, client()->request()->GetOrigin());
+ EXPECT_EQ(resources1, client()->request()->GetResources());
+
+ // Send 3rd request
+ handler()->SendRequest(request());
+ // Verify Handler store the request correctly.
+ ASSERT_EQ(3u, handler()->requests().size());
+ EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin());
+ EXPECT_EQ(resources(), handler()->requests()[0]->GetResources());
+ EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin());
+ EXPECT_EQ(resources1, handler()->requests()[1]->GetResources());
+ EXPECT_EQ(origin(), handler()->requests()[2]->GetOrigin());
+ EXPECT_EQ(resources(), handler()->requests()[2]->GetResources());
+ // Verify client's onPermissionRequest was called
+ EXPECT_EQ(origin(), client()->request()->GetOrigin());
+ EXPECT_EQ(resources(), client()->request()->GetResources());
+
+ // Cancel the request
+ handler()->CancelRequest(request()->GetOrigin(), request()->GetResources());
+ // Verify client's OnPermissionRequestCancled() was called.
+ EXPECT_EQ(origin(), client()->canceled_request()->GetOrigin());
+ EXPECT_EQ(resources(), client()->canceled_request()->GetResources());
+ // Verify Handler store the request correctly, the 1st and 3rd were removed.
+ ASSERT_EQ(1u, handler()->requests().size());
+ EXPECT_EQ(origin1, handler()->requests()[0]->GetOrigin());
+ EXPECT_EQ(resources1, handler()->requests()[0]->GetResources());
+}
+
+} // android_webview

Powered by Google App Engine
This is Rietveld 408576698