// 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" #include "url/gurl.h" using extensions::DialDeviceData; using extensions::Extension; namespace api = extensions::api; namespace { class DialAPITest : public ExtensionApiTest { public: DialAPITest() {} virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { ExtensionApiTest::SetUpCommandLine(command_line); command_line->AppendSwitchASCII( switches::kWhitelistedExtensionID, "ddchlicdkolnonkihahngkmmmjnjlkkf"); } }; } // namespace // http://crbug.com/177163 #if defined(OS_WIN) && !defined(NDEBUG) #define MAYBE_DeviceListEvents DISABLED_DeviceListEvents #else #define MAYBE_DeviceListEvents DeviceListEvents #endif // Test receiving DIAL API events. IN_PROC_BROWSER_TEST_F(DialAPITest, MAYBE_DeviceListEvents) { // Setup the test. ASSERT_TRUE(RunExtensionSubtest("dial/experimental", "device_list.html")); // Send three device list updates. scoped_refptr api = extensions::DialAPIFactory::GetInstance()->GetForProfile(profile()); ASSERT_TRUE(api.get()); extensions::DialRegistry::DeviceList devices; ResultCatcher catcher; DialDeviceData device1; device1.set_device_id("1"); device1.set_label("1"); device1.set_device_description_url(GURL("http://127.0.0.1/dd.xml")); devices.push_back(device1); api->SendEventOnUIThread(devices); DialDeviceData device2; device2.set_device_id("2"); device2.set_label("2"); device2.set_device_description_url(GURL("http://127.0.0.2/dd.xml")); devices.push_back(device2); api->SendEventOnUIThread(devices); DialDeviceData device3; device3.set_device_id("3"); device3.set_label("3"); device3.set_device_description_url(GURL("http://127.0.0.3/dd.xml")); devices.push_back(device3); api->SendEventOnUIThread(devices); 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(); } IN_PROC_BROWSER_TEST_F(DialAPITest, OnError) { ASSERT_TRUE(RunExtensionSubtest("dial/experimental", "on_error.html")); }