Index: chrome/browser/policy/policy_browsertest.cc |
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc |
index 6817c64effadeedef78139e1ed77c65f9fed9c6f..533dcfe90fa9857ad73c08d739b2ce2359ed697b 100644 |
--- a/chrome/browser/policy/policy_browsertest.cc |
+++ b/chrome/browser/policy/policy_browsertest.cc |
@@ -119,6 +119,8 @@ |
#include "components/translate/core/browser/translate_infobar_delegate.h" |
#include "components/variations/service/variations_service.h" |
#include "components/version_info/version_info.h" |
+#include "content/browser/bluetooth/bluetooth_dispatcher_host.h" |
+#include "content/common/bluetooth/bluetooth_messages.h" |
#include "content/public/browser/browser_child_process_host_iterator.h" |
#include "content/public/browser/browser_context.h" |
#include "content/public/browser/browser_thread.h" |
@@ -150,6 +152,8 @@ |
#include "content/public/test/mock_notification_observer.h" |
#include "content/public/test/test_navigation_observer.h" |
#include "content/public/test/test_utils.h" |
+#include "content/public/test/web_contents_tester.h" |
+#include "device/bluetooth/test/mock_bluetooth_adapter.h" |
#include "extensions/browser/extension_dialog_auto_confirm.h" |
#include "extensions/browser/extension_host.h" |
#include "extensions/browser/extension_prefs.h" |
@@ -162,6 +166,8 @@ |
#include "extensions/common/extension.h" |
#include "extensions/common/extension_set.h" |
#include "extensions/common/manifest_handlers/shared_module_info.h" |
+#include "ipc/ipc_test_sink.h" |
+#include "ipc/message_filter.h" |
#include "net/base/net_errors.h" |
#include "net/base/net_util.h" |
#include "net/base/url_util.h" |
@@ -3654,6 +3660,106 @@ INSTANTIATE_TEST_CASE_P(MediaStreamDevicesControllerBrowserTestInstance, |
MediaStreamDevicesControllerBrowserTest, |
testing::Bool()); |
+class OriginTest : public InProcessBrowserTest { |
+ void SetUpOnMainThread() override { |
+ ASSERT_TRUE(embedded_test_server()->Start()); |
+ } |
+}; |
+IN_PROC_BROWSER_TEST_F(OriginTest, CanNavigate) { |
+ ui_test_utils::NavigateToURL( |
+ browser(), |
+ embedded_test_server()->GetURL("localhost", "/simple_page.html")); |
+ content::WebContents* web_contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ |
+ ASSERT_EQ("http://localhost:33158", |
+ web_contents->GetMainFrame()->GetLastCommittedOrigin().Serialize()); |
+} |
+ |
+class WebBluetoothPolicyTest : public PolicyTest { |
+ void SetUpOnMainThread() override { |
+ PolicyTest::SetUpOnMainThread(); |
+ ASSERT_TRUE(embedded_test_server()->Start()); |
+ } |
+}; |
+ |
+class WaitForRequestDeviceMessage : public IPC::Listener { |
+ public: |
+ explicit WaitForRequestDeviceMessage( |
+ scoped_refptr<content::MessageLoopRunner> runner) |
+ : runner_(runner) {} |
+ |
+ bool OnMessageReceived(const IPC::Message& msg) override { |
+ if (msg.type() == BluetoothMsg_RequestDeviceError::ID || |
+ msg.type() == BluetoothMsg_RequestDeviceSuccess::ID) { |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&content::MessageLoopRunner::Quit, runner_)); |
+ } |
+ return false; // Store the message in the sink. |
+ } |
+ |
+ private: |
+ scoped_refptr<content::MessageLoopRunner> runner_; |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(WebBluetoothPolicyTest, Block) { |
+ PolicyMap policies; |
+ policies.Set(key::kDefaultWebBluetoothGuardSetting, POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
+ new base::FundamentalValue(2), nullptr); |
+ UpdateProviderPolicy(policies); |
+ |
+ ui_test_utils::NavigateToURL( |
+ browser(), |
+ embedded_test_server()->GetURL("localhost", "/simple_page.html")); |
+ content::WebContents* web_contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ ASSERT_THAT( |
+ web_contents->GetMainFrame()->GetLastCommittedOrigin().Serialize(), |
+ testing::StartsWith("http://localhost:")); |
+ |
+ IPC::TestSink sink; |
+ scoped_refptr<content::BluetoothDispatcherHost> bluetooth = |
+ new content::BluetoothDispatcherHost( |
+ web_contents->GetRenderProcessHost()->GetID()); |
+ bluetooth->GetFilter()->OnFilterAdded(&sink); |
+ |
+ scoped_refptr<device::MockBluetoothAdapter> adapter = |
+ new testing::NiceMock<device::MockBluetoothAdapter>; |
+ EXPECT_CALL(*adapter, IsPresent()).WillRepeatedly(testing::Return(true)); |
+ bluetooth->SetBluetoothAdapterForTesting(adapter); |
+ |
+ std::vector<content::BluetoothScanFilter> scan_filters; |
+ content::BluetoothScanFilter scan_filter; |
+ scan_filter.name = "Hello"; |
+ scan_filters.push_back(scan_filter); |
+ |
+ scoped_refptr<content::MessageLoopRunner> request_device_runner = |
+ new content::MessageLoopRunner; |
+ WaitForRequestDeviceMessage waiter(request_device_runner); |
+ sink.AddFilter(&waiter); |
+ |
+ bluetooth->OnMessageReceived(BluetoothHostMsg_RequestDevice( |
+ 1, 1, web_contents->GetMainFrame()->GetRoutingID(), scan_filters, |
+ std::vector<device::BluetoothUUID>())); |
+ |
+ request_device_runner->Run(); |
+ |
+ // Make sure no more IPCs arrive in the TestSink. |
+ web_contents = nullptr; |
+ browser()->tab_strip_model()->CloseAllTabs(); |
+ |
+ const IPC::Message* response_msg = |
+ 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)); |
+ |
+ bluetooth->SetBluetoothAdapterForTesting(nullptr); |
+} |
+ |
// Test that when extended reporting opt-in is disabled by policy, the |
// opt-in checkbox does not appear on SSL blocking pages. |
IN_PROC_BROWSER_TEST_F(PolicyTest, SafeBrowsingExtendedReportingOptInAllowed) { |