// 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 "base/files/file_path.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "content/browser/device_orientation/device_data.h" #include "content/browser/device_orientation/orientation.h" #include "content/browser/device_orientation/provider.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_switches.h" #include "content/shell/shell.h" #include "content/test/content_browser_test.h" #include "content/test/content_browser_test_utils.h" namespace content { class MockProvider : public Provider { public: MockProvider(const DeviceData* device_data, DeviceData::Type type) : device_data_(device_data), device_data_type_(type), added_observer_(false), removed_observer_(false) { } virtual void AddObserver(Observer* observer) OVERRIDE { added_observer_ = true; observer->OnDeviceDataUpdate(device_data_.get(), device_data_type_); } virtual void RemoveObserver(Observer* observer) OVERRIDE { removed_observer_ = true; } scoped_refptr device_data_; DeviceData::Type device_data_type_; bool added_observer_; bool removed_observer_; private: virtual ~MockProvider() {} }; class DeviceOrientationBrowserTest : public ContentBrowserTest { public: // From ContentBrowserTest. virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { EXPECT_TRUE(!command_line->HasSwitch(switches::kDisableDeviceOrientation)); } }; // crbug.com/113952 IN_PROC_BROWSER_TEST_F(DeviceOrientationBrowserTest, BasicTest) { scoped_refptr test_orientation(new Orientation()); test_orientation->set_alpha(1); test_orientation->set_beta(2); test_orientation->set_gamma(3); test_orientation->set_absolute(true); scoped_refptr provider( new MockProvider(test_orientation.get(), DeviceData::kTypeOrientation)); Provider::SetInstanceForTests(provider.get()); // The test page will register an event handler for orientation events, // expects to get an event with kTestOrientation orientation, // then removes the event handler and navigates to #pass. GURL test_url = GetTestUrl( "device_orientation", "device_orientation_test.html"); NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2); // Check that the page got the event it expected and that the provider // saw requests for adding and removing an observer. EXPECT_EQ("pass", shell()->web_contents()->GetURL().ref()); EXPECT_TRUE(provider->added_observer_); EXPECT_TRUE(provider->removed_observer_); } } // namespace content