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

Unified Diff: content/browser/bluetooth/bluetooth_dispatcher_host_unittest.cc

Issue 1706503002: Add enterprise policy to turn off Bluetooth. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: Release the BrowserMessageFilter::Internal once it has attached the Sender. Created 4 years, 10 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: content/browser/bluetooth/bluetooth_dispatcher_host_unittest.cc
diff --git a/content/browser/bluetooth/bluetooth_dispatcher_host_unittest.cc b/content/browser/bluetooth/bluetooth_dispatcher_host_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..862ebcebc5a1c64f42fcb9d178a53ea69d85ffdc
--- /dev/null
+++ b/content/browser/bluetooth/bluetooth_dispatcher_host_unittest.cc
@@ -0,0 +1,109 @@
+// Copyright 2016 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 "content/browser/bluetooth/bluetooth_dispatcher_host.h"
+
+#include "base/run_loop.h"
+#include "content/common/bluetooth/bluetooth_messages.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/content_browser_client.h"
+#include "content/public/test/mock_render_process_host.h"
+#include "content/public/test/test_renderer_host.h"
+#include "device/bluetooth/test/mock_bluetooth_adapter.h"
+
+namespace content {
+namespace {
+
+class BluetoothDispatcherHostTest : public RenderViewHostTestHarness {
+ protected:
+ void TearDown() override {
+ if (old_browser_client_) {
+ SetBrowserClientForTesting(old_browser_client_);
+ }
+ RenderViewHostTestHarness::TearDown();
+ }
+
+ void SetBrowserClient(ContentBrowserClient* new_browser_client) {
+ EXPECT_FALSE(old_browser_client_);
+ old_browser_client_ = SetBrowserClientForTesting(new_browser_client);
+ }
+
+ ContentBrowserClient* old_browser_client_ = nullptr;
+};
+
+class WaitForRequestDeviceMessage : public IPC::Listener {
+ public:
+ explicit WaitForRequestDeviceMessage(base::RunLoop* loop) : loop_(loop) {}
+
+ bool OnMessageReceived(const IPC::Message& msg) override {
+ if (msg.type() == BluetoothMsg_RequestDeviceError::ID ||
+ msg.type() == BluetoothMsg_RequestDeviceSuccess::ID) {
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ loop_->QuitClosure());
+ }
+ return false; // Store the message in the sink.
+ }
+
+ private:
+ base::RunLoop* loop_;
+};
+
+class DisallowBluetoothContentBrowserClient : public ContentBrowserClient {
+ bool AllowWebBluetooth() override { return false; }
+};
+
+// PolicyTest.BlockWebBluetooth tests that policy affects the
+// ContentBrowserClient.
+TEST_F(BluetoothDispatcherHostTest, ContentClientCanDisableAPI) {
+ NavigateAndCommit(GURL("https://example.com/"));
+ ASSERT_EQ("https://example.com",
+ main_rfh()->GetLastCommittedOrigin().Serialize());
+
+ scoped_refptr<content::BluetoothDispatcherHost> bluetooth =
+ new content::BluetoothDispatcherHost(process()->GetID());
+ process()->AddFilter(bluetooth.get());
+
+ DisallowBluetoothContentBrowserClient disallow_bluetooth_client;
+ SetBrowserClient(&disallow_bluetooth_client);
+
+ // Make the adapter say it's present.
+ scoped_refptr<device::MockBluetoothAdapter> adapter =
+ new testing::NiceMock<device::MockBluetoothAdapter>;
+ EXPECT_CALL(*adapter, IsPresent()).WillRepeatedly(testing::Return(true));
+ bluetooth->SetBluetoothAdapterForTesting(adapter);
+
+ // Build a filter for the requestDevice() call.
+ std::vector<content::BluetoothScanFilter> scan_filters;
+ content::BluetoothScanFilter scan_filter;
+ scan_filter.name = "Hello";
+ scan_filters.push_back(scan_filter);
+
+ base::RunLoop request_device_loop;
+ WaitForRequestDeviceMessage waiter(&request_device_loop);
+ process()->sink().AddFilter(&waiter);
+
+ bluetooth->OnMessageReceived(BluetoothHostMsg_RequestDevice(
+ 1, 1, main_rfh()->GetRoutingID(), scan_filters,
+ std::vector<device::BluetoothUUID>()));
+
+ request_device_loop.Run();
+
+ // Check that we reject with the right message.
+ const IPC::Message* response_msg = process()->sink().GetUniqueMessageMatching(
+ BluetoothMsg_RequestDeviceError::ID);
+ ASSERT_TRUE(response_msg);
+ BluetoothMsg_RequestDeviceError::Param response;
+ BluetoothMsg_RequestDeviceError::Read(response_msg, &response);
+ EXPECT_EQ(blink::WebBluetoothError::ChooserDisabled, base::get<2>(response));
+
+ // Avoid leaking the MockBluetoothAdapter.
+ bluetooth->SetBluetoothAdapterForTesting(nullptr);
+
+ // Make sure no more messages go through the BluetoothDispatcherHost after
+ // it's destroyed.
+ DeleteContents();
+}
+
+} // namespace
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698