Home | History | Annotate | Download | only in dial
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/command_line.h"
      6 #include "chrome/browser/extensions/api/dial/dial_api.h"
      7 #include "chrome/browser/extensions/api/dial/dial_api_factory.h"
      8 #include "chrome/browser/extensions/api/dial/dial_registry.h"
      9 #include "chrome/browser/extensions/extension_apitest.h"
     10 #include "chrome/browser/extensions/extension_service.h"
     11 #include "chrome/browser/extensions/extension_test_message_listener.h"
     12 #include "extensions/common/switches.h"
     13 #include "testing/gmock/include/gmock/gmock.h"
     14 #include "url/gurl.h"
     15 
     16 using extensions::DialDeviceData;
     17 using extensions::Extension;
     18 
     19 namespace api = extensions::api;
     20 
     21 namespace {
     22 
     23 class DialAPITest : public ExtensionApiTest {
     24  public:
     25   DialAPITest() {}
     26 
     27   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     28     ExtensionApiTest::SetUpCommandLine(command_line);
     29     command_line->AppendSwitchASCII(
     30         extensions::switches::kWhitelistedExtensionID,
     31         "ddchlicdkolnonkihahngkmmmjnjlkkf");
     32   }
     33 };
     34 
     35 }  // namespace
     36 
     37 // http://crbug.com/177163
     38 #if defined(OS_WIN) && !defined(NDEBUG)
     39 #define MAYBE_DeviceListEvents DISABLED_DeviceListEvents
     40 #else
     41 #define MAYBE_DeviceListEvents DeviceListEvents
     42 #endif
     43 // Test receiving DIAL API events.
     44 IN_PROC_BROWSER_TEST_F(DialAPITest, MAYBE_DeviceListEvents) {
     45   // Setup the test.
     46   ASSERT_TRUE(RunExtensionSubtest("dial/experimental", "device_list.html"));
     47 
     48   // Send three device list updates.
     49   scoped_refptr<extensions::DialAPI> api =
     50       extensions::DialAPIFactory::GetInstance()->GetForBrowserContext(
     51           profile());
     52   ASSERT_TRUE(api.get());
     53   extensions::DialRegistry::DeviceList devices;
     54 
     55 
     56   ResultCatcher catcher;
     57 
     58   DialDeviceData device1;
     59   device1.set_device_id("1");
     60   device1.set_label("1");
     61   device1.set_device_description_url(GURL("http://127.0.0.1/dd.xml"));
     62 
     63   devices.push_back(device1);
     64   api->SendEventOnUIThread(devices);
     65 
     66   DialDeviceData device2;
     67   device2.set_device_id("2");
     68   device2.set_label("2");
     69   device2.set_device_description_url(GURL("http://127.0.0.2/dd.xml"));
     70 
     71   devices.push_back(device2);
     72   api->SendEventOnUIThread(devices);
     73 
     74   DialDeviceData device3;
     75   device3.set_device_id("3");
     76   device3.set_label("3");
     77   device3.set_device_description_url(GURL("http://127.0.0.3/dd.xml"));
     78 
     79   devices.push_back(device3);
     80   api->SendEventOnUIThread(devices);
     81 
     82   EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
     83 }
     84 
     85 // Test discoverNow fails if there are no listeners. When there are no listeners
     86 // the DIAL API will not be active.
     87 IN_PROC_BROWSER_TEST_F(DialAPITest, Discovery) {
     88   ASSERT_TRUE(RunExtensionSubtest("dial/experimental", "discovery.html"));
     89 }
     90 
     91 // Make sure this API is only accessible to whitelisted extensions.
     92 IN_PROC_BROWSER_TEST_F(DialAPITest, NonWhitelistedExtension) {
     93   ResultCatcher catcher;
     94   catcher.RestrictToProfile(browser()->profile());
     95 
     96   ExtensionTestMessageListener listener("ready", true);
     97   const extensions::Extension* extension = LoadExtensionWithFlags(
     98       test_data_dir_.AppendASCII("dial/whitelist"),
     99       ExtensionBrowserTest::kFlagIgnoreManifestWarnings);
    100   // We should have a DIAL API not available warning.
    101   ASSERT_FALSE(extension->install_warnings().empty());
    102 
    103   EXPECT_TRUE(listener.WaitUntilSatisfied());
    104 
    105   listener.Reply("go");
    106   EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
    107 }
    108 
    109 IN_PROC_BROWSER_TEST_F(DialAPITest, OnError) {
    110   ASSERT_TRUE(RunExtensionSubtest("dial/experimental", "on_error.html"));
    111 }
    112