Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(642)

Unified Diff: content/browser/battery_status/battery_monitor_integration_browsertest.cc

Issue 734123002: Mojify the battery status browsertests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Back to using the content client API now that it's landed. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/battery_status/battery_monitor_integration_browsertest.cc
diff --git a/content/browser/battery_status/battery_monitor_integration_browsertest.cc b/content/browser/battery_status/battery_monitor_integration_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..16a819c3c673c0f907b9c9df55dc2775453a6de0
--- /dev/null
+++ b/content/browser/battery_status/battery_monitor_integration_browsertest.cc
@@ -0,0 +1,152 @@
+// Copyright 2014 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/callback_list.h"
+#include "base/lazy_instance.h"
+#include "base/thread_task_runner_handle.h"
+#include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_client.h"
+#include "content/public/common/service_registry.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/public/test/test_navigation_observer.h"
+#include "content/public/test/test_utils.h"
+#include "content/shell/browser/shell.h"
+#include "content/shell/browser/shell_content_browser_client.h"
+#include "device/battery/battery_monitor.mojom.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
+
+// These tests run against a dummy implementation of the BatteryMonitor service.
+// That is, they verify that the service implementation is correctly exposed to
+// the renderer, whatever the implementation is.
+
+namespace content {
+
+namespace {
+
+typedef base::CallbackList<void(const device::BatteryStatus&)>
+ BatteryUpdateCallbackList;
+typedef BatteryUpdateCallbackList::Subscription BatteryUpdateSubscription;
+
+// Global battery state used in the tests.
+device::BatteryStatus g_battery_status;
+// Global list of test battery monitors to notify when |g_battery_status|
+// changes.
+base::LazyInstance<BatteryUpdateCallbackList> g_callback_list =
+ LAZY_INSTANCE_INITIALIZER;
+
+// Updates the global battery state and notifies existing test monitors.
+void UpdateBattery(const device::BatteryStatus& battery_status) {
+ g_battery_status = battery_status;
+ g_callback_list.Get().Notify(battery_status);
+}
+
+class FakeBatteryMonitor : public device::BatteryMonitor {
+ public:
+ static void Create(mojo::InterfaceRequest<BatteryMonitor> request) {
+ new FakeBatteryMonitor(request.Pass());
+ }
+
+ private:
+ FakeBatteryMonitor(mojo::InterfaceRequest<BatteryMonitor> request)
+ : subscription_(
+ g_callback_list.Get().Add(base::Bind(&FakeBatteryMonitor::DidChange,
+ base::Unretained(this)))),
+ binding_(this, request.Pass()) {
+ DidChange(g_battery_status);
+ }
+ ~FakeBatteryMonitor() override {}
+
+ void DidChange(const device::BatteryStatus& battery_status) {
+ device::BatteryStatusPtr status(device::BatteryStatus::New());
+ *status = battery_status;
+ binding_.client()->DidChange(status.Pass());
+ }
+
+ scoped_ptr<BatteryUpdateSubscription> subscription_;
+ mojo::StrongBinding<BatteryMonitor> binding_;
+};
+
+// Overrides the default service implementation with the test implementation
+// declared above.
+class TestContentBrowserClient : public ContentBrowserClient {
+ public:
+ void OverrideRenderProcessMojoServices(ServiceRegistry* registry) override {
+ registry->AddService(base::Bind(&FakeBatteryMonitor::Create));
+ }
+};
+
+class BatteryMonitorIntegrationTest : public ContentBrowserTest {
+ public:
+ BatteryMonitorIntegrationTest() {}
+
+ void SetUpOnMainThread() override {
+ old_client_ = SetBrowserClientForTesting(&test_client_);
+ }
+
+ void TearDownOnMainThread() override {
+ SetBrowserClientForTesting(old_client_);
+ }
+
+ private:
+ TestContentBrowserClient test_client_;
+ ContentBrowserClient* old_client_;
+
+ DISALLOW_COPY_AND_ASSIGN(BatteryMonitorIntegrationTest);
+};
+
+IN_PROC_BROWSER_TEST_F(BatteryMonitorIntegrationTest, DefaultValues) {
+ // From JavaScript request a promise for the battery status information and
+ // once it resolves check the default values and navigate to #pass.
+ UpdateBattery(device::BatteryStatus());
+ GURL test_url =
+ GetTestUrl("battery_status", "battery_status_default_test.html");
+ NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
+ EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
+}
+
+IN_PROC_BROWSER_TEST_F(BatteryMonitorIntegrationTest, ResolvePromise) {
+ // Set the fake battery monitor to return predefined battery status values.
+ // From JavaScript request a promise for the battery status information and
+ // once it resolves check the values and navigate to #pass.
+ device::BatteryStatus status;
+ status.charging = true;
+ status.charging_time = 100;
+ status.discharging_time = std::numeric_limits<double>::infinity();
+ status.level = 0.5;
+ UpdateBattery(status);
+
+ GURL test_url = GetTestUrl("battery_status",
+ "battery_status_promise_resolution_test.html");
+ NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
+ EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
+}
+
+IN_PROC_BROWSER_TEST_F(BatteryMonitorIntegrationTest, EventListener) {
+ // Set the fake battery monitor to return default battery status values.
+ // From JavaScript request a promise for the battery status information.
+ // Once it resolves add an event listener for battery level change. Set
+ // battery level to 0.6 and invoke update. Check that the event listener
+ // is invoked with the correct value for level and navigate to #pass.
+ device::BatteryStatus status;
+ UpdateBattery(status);
+
+ TestNavigationObserver same_tab_observer(shell()->web_contents(), 2);
+ GURL test_url =
+ GetTestUrl("battery_status", "battery_status_event_listener_test.html");
+ shell()->LoadURL(test_url);
+ same_tab_observer.Wait();
+ EXPECT_EQ("resolved", shell()->web_contents()->GetLastCommittedURL().ref());
+
+ TestNavigationObserver same_tab_observer2(shell()->web_contents(), 1);
+ status.level = 0.6;
+ UpdateBattery(status);
+ same_tab_observer2.Wait();
+ EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
+}
+
+} // namespace
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698