blob: 17d944614d744e69517f570bd073348dbb9fadec [file] [log] [blame]
// 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<const DeviceData> 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<Orientation> 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<MockProvider> 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