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

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: fix error, landed it again 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..2948dd9910a2308d98ad7b0a2ba10fa405aca955
--- /dev/null
+++ b/android_webview/native/permission/permission_request_handler_unittest.cc
@@ -0,0 +1,269 @@
+// 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.h"
+#include "android_webview/native/permission/aw_permission_request_delegate.h"
+#include "android_webview/native/permission/permission_request_handler.h"
+#include "android_webview/native/permission/permission_request_handler_client.h"
+#include "base/bind.h"
+#include "base/callback.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace android_webview {
+
+class TestAwPermissionRequestDelegate : public AwPermissionRequestDelegate {
+ public:
+ TestAwPermissionRequestDelegate(
+ const GURL& origin, int64 resources, base::Callback<void(bool)> callback)
+ : origin_(origin),
+ resources_(resources),
+ callback_(callback) {}
+
+ // Get the origin which initiated the permission request.
+ virtual const GURL& GetOrigin() OVERRIDE {
+ return origin_;
+ }
+
+ // Get the resources the origin wanted to access.
+ virtual int64 GetResources() OVERRIDE {
+ return resources_;
+ }
+
+ // Notify the permission request is allowed or not.
+ virtual void NotifyRequestResult(bool allowed) OVERRIDE {
+ callback_.Run(allowed);
+ }
+
+ private:
+ GURL origin_;
+ int64 resources_;
+ base::Callback<void(bool)> callback_;
+};
+
+class TestPermissionRequestHandlerClient :
+ public PermissionRequestHandlerClient {
+ public:
+ struct Permission {
+ Permission()
+ :resources(0) {}
+ Permission(const GURL& origin, int64 resources)
+ : origin(origin),
+ resources(resources) {}
+ GURL origin;
+ int64 resources;
+ };
+
+ virtual void OnPermissionRequest(AwPermissionRequest* request) OVERRIDE {
+ request_ = request;
+ requested_permission_ =
+ Permission(request->GetOrigin(), request->GetResources());
+ }
+
+ virtual void OnPermissionRequestCanceled(
+ AwPermissionRequest* request) OVERRIDE{
+ canceled_permission_ =
+ Permission(request->GetOrigin(), request->GetResources());
+ }
+
+ AwPermissionRequest* request() {
+ return request_;
+ }
+
+ const Permission& requested_permission() {
+ return requested_permission_;
+ }
+
+ const Permission& canceled_permission() {
+ return canceled_permission_;
+ }
+
+ void Grant() {
+ request_->OnAccept(NULL, NULL, true);
+ request_ = NULL;
+ }
+
+ void Deny() {
+ request_->OnAccept(NULL, NULL, false);
+ request_ = NULL;
+ }
+
+ private:
+ AwPermissionRequest* request_;
+ Permission requested_permission_;
+ Permission canceled_permission_;
+};
+
+class TestPermissionRequestHandler : public PermissionRequestHandler {
+ public:
+ TestPermissionRequestHandler(PermissionRequestHandlerClient* client)
+ : PermissionRequestHandler(client) {
+ }
+
+ const std::vector<base::WeakPtr<AwPermissionRequest> > requests() {
+ return requests_;
+ }
+
+ void PruneRequests() {
+ return PermissionRequestHandler::PruneRequests();
+ }
+};
+
+class PermissionRequestHandlerTest : public testing::Test {
+ public:
+ PermissionRequestHandlerTest()
+ : handler_(&client_),
+ allowed_(false) {}
+
+ void NotifyRequestResult(bool allowed) {
+ allowed_ = allowed;
+ }
+
+ protected:
+ virtual void SetUp() OVERRIDE {
+ testing::Test::SetUp();
+ origin_ = GURL("http://www.google.com");
+ resources_ =
+ AwPermissionRequest::VideoCapture | AwPermissionRequest::AudioCapture;
+ delegate_.reset(
+ new TestAwPermissionRequestDelegate(
+ origin_, resources_, base::Bind(
+ &PermissionRequestHandlerTest::NotifyRequestResult,
+ base::Unretained(this))));
+ }
+
+ const GURL& origin() {
+ return origin_;
+ }
+
+ int64 resources() {
+ return resources_;
+ }
+
+ scoped_ptr<AwPermissionRequestDelegate> delegate() {
+ return delegate_.Pass();
+ }
+
+ TestPermissionRequestHandler* handler() {
+ return &handler_;
+ }
+
+ TestPermissionRequestHandlerClient* client() {
+ return &client_;
+ }
+
+ bool allowed() {
+ return allowed_;
+ }
+
+ private:
+ GURL origin_;
+ int64 resources_;
+ scoped_ptr<AwPermissionRequestDelegate> delegate_;
+ TestPermissionRequestHandlerClient client_;
+ TestPermissionRequestHandler handler_;
+ bool allowed_;
+};
+
+TEST_F(PermissionRequestHandlerTest, TestPermissionGranted) {
+ handler()->SendRequest(delegate().Pass());
+ // 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(allowed());
+ handler()->PruneRequests();
+ // Verify the weak reference in handler was removed.
+ EXPECT_TRUE(handler()->requests().empty());
+}
+
+TEST_F(PermissionRequestHandlerTest, TestPermissionDenied) {
+ handler()->SendRequest(delegate().Pass());
+ // 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 deny request.
+ client()->Deny();
+ // Verify the request is notified as granted
+ EXPECT_FALSE(allowed());
+ handler()->PruneRequests();
+ // Verify the weak reference in handler was removed.
+ EXPECT_TRUE(handler()->requests().empty());
+}
+
+TEST_F(PermissionRequestHandlerTest, TestMultiplePermissionRequest) {
+ GURL origin1 = GURL("http://a.google.com");
+ int64 resources1 = AwPermissionRequest::Geolocation;
+
+ scoped_ptr<AwPermissionRequestDelegate> delegate1;
+ delegate1.reset(new TestAwPermissionRequestDelegate(
+ origin1, resources1,
+ base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult,
+ base::Unretained(this))));
+
+ // Send 1st request
+ handler()->SendRequest(delegate().Pass());
+ // 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(delegate1.Pass());
+ // 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 which has same origin and resources as first one.
+ delegate1.reset(new TestAwPermissionRequestDelegate(origin(), resources(),
+ base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult,
+ base::Unretained(this))));
+ handler()->SendRequest(delegate1.Pass());
+ // 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(origin(), resources());
+ // Verify client's OnPermissionRequestCancled() was called.
+ EXPECT_EQ(origin(), client()->canceled_permission().origin);
+ EXPECT_EQ(resources(), client()->canceled_permission().resources);
+ // Verify Handler store the request correctly, the 1st and 3rd were removed.
+ handler()->PruneRequests();
+ ASSERT_EQ(1u, handler()->requests().size());
+ EXPECT_EQ(origin1, handler()->requests()[0]->GetOrigin());
+ EXPECT_EQ(resources1, handler()->requests()[0]->GetResources());
+}
+
+} // android_webview
« 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