Index: chrome/browser/extensions/api/dial/dial_apitest.cc |
diff --git a/chrome/browser/extensions/api/dial/dial_apitest.cc b/chrome/browser/extensions/api/dial/dial_apitest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0fcdcafc9eef1f328a772fd73a579e711995d479 |
--- /dev/null |
+++ b/chrome/browser/extensions/api/dial/dial_apitest.cc |
@@ -0,0 +1,107 @@ |
+// Copyright (c) 2012 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 "base/command_line.h" |
+#include "chrome/browser/extensions/api/dial/dial_api.h" |
+#include "chrome/browser/extensions/api/dial/dial_api_factory.h" |
+#include "chrome/browser/extensions/api/dial/dial_registry.h" |
+#include "chrome/browser/extensions/extension_apitest.h" |
+#include "chrome/browser/extensions/extension_service.h" |
+#include "chrome/browser/extensions/extension_test_message_listener.h" |
+#include "chrome/common/chrome_switches.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+ |
+using extensions::DialDeviceData; |
+using extensions::Extension; |
+ |
+namespace api = extensions::api; |
+ |
+namespace { |
+ |
+class DialAPITest : public ExtensionApiTest { |
+ public: |
+ DialAPITest() {} |
+ |
+ virtual void SetUpCommandLine(CommandLine* command_line) { |
+ ExtensionApiTest::SetUpCommandLine(command_line); |
+ command_line->AppendSwitchASCII( |
+ switches::kWhitelistedExtensionID, "ddchlicdkolnonkihahngkmmmjnjlkkf"); |
+ } |
+}; |
+ |
+} // namespace |
+ |
+// Test receiving DIAL API events. |
+IN_PROC_BROWSER_TEST_F(DialAPITest, DeviceEvents) { |
+ scoped_refptr<extensions::DialAPI> api = |
+ extensions::DialAPIFactory::GetInstance()->GetForProfile(profile()); |
+ ASSERT_TRUE(api.get()); |
+ |
+ // Make sure we get device data. |
+ ResultCatcher catcher; |
+ catcher.RestrictToProfile(browser()->profile()); |
+ |
+ ExtensionTestMessageListener listener("ready", true); |
+ ExtensionTestMessageListener listener2("setup", true); |
+ |
+ ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("dial/experimental"))); |
+ EXPECT_TRUE(listener.WaitUntilSatisfied()); |
+ |
+ listener.Reply("setup"); |
+ listener2.WaitUntilSatisfied(); |
+ |
+ extensions::DialRegistry::DeviceList devices; |
+ |
+ DialDeviceData device1; |
+ device1.set_device_id("1"); |
+ device1.set_label("1"); |
+ device1.set_device_description_url("http://1"); |
+ |
+ devices.push_back(device1); |
+ api->SendEventOnUIThread(devices); |
+ |
+ DialDeviceData device2; |
+ device2.set_device_id("2"); |
+ device2.set_label("2"); |
+ device2.set_device_description_url("http://2"); |
+ |
+ devices.push_back(device2); |
+ api->SendEventOnUIThread(devices); |
+ |
+ DialDeviceData device3; |
+ device3.set_device_id("3"); |
+ device3.set_label("3"); |
+ device3.set_device_description_url("http://3"); |
+ |
+ devices.push_back(device3); |
+ api->SendEventOnUIThread(devices); |
+ |
+ listener2.Reply("go"); |
+ |
+ EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
+} |
+ |
+// Test discoverNow fails if there are no listeners. When there are no listeners |
+// the DIAL API will not be active. |
+IN_PROC_BROWSER_TEST_F(DialAPITest, Discovery) { |
+ ASSERT_TRUE(RunExtensionSubtest("dial/experimental", "discovery.html")); |
+} |
+ |
+// Make sure this API is only accessible to whitelisted extensions. |
+IN_PROC_BROWSER_TEST_F(DialAPITest, NonWhitelistedExtension) { |
+ ResultCatcher catcher; |
+ catcher.RestrictToProfile(browser()->profile()); |
+ |
+ ExtensionTestMessageListener listener("ready", true); |
+ const extensions::Extension* extension = LoadExtensionWithFlags( |
+ test_data_dir_.AppendASCII("dial/whitelist"), |
+ ExtensionBrowserTest::kFlagIgnoreManifestWarnings); |
+ // We should have a DIAL API not available warning. |
+ ASSERT_FALSE(extension->install_warnings().empty()); |
+ |
+ EXPECT_TRUE(listener.WaitUntilSatisfied()); |
+ |
+ listener.Reply("go"); |
+ EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
+} |