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

Unified Diff: content/browser/notifications/notification_browsertest.cc

Issue 1050623003: Move the Notification browser tests down to //content. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@n-db-Integrate
Patch Set: Created 5 years, 9 months 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
« no previous file with comments | « no previous file | content/browser/notifications/notification_message_filter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/notifications/notification_browsertest.cc
diff --git a/content/browser/notifications/notification_browsertest.cc b/content/browser/notifications/notification_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c0b9a7b0658465abc8a4c92355561af2afacf0da
--- /dev/null
+++ b/content/browser/notifications/notification_browsertest.cc
@@ -0,0 +1,191 @@
+// Copyright 2015 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 <vector>
+
+#include "content/browser/notifications/notification_message_filter.h"
+#include "content/public/browser/platform_notification_service.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/platform_notification_data.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/shell/browser/shell.h"
+#include "net/test/spawned_test_server/spawned_test_server.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "url/gurl.h"
+
+namespace content {
+
+const char kNotificationPage[] = "files/notifications/test.html";
+
+namespace {
+
+// Fake implementation of the Platform Notification Service.
+class FakePlatformNotificationService : public PlatformNotificationService {
+ public:
+ ~FakePlatformNotificationService() override {}
+
+ // Structure representing a shown persistent notification.
+ struct PersistentNotification {
+ BrowserContext* browser_context;
+ int64_t persistent_notification_id;
+ GURL origin;
+ SkBitmap icon;
+ PlatformNotificationData notification_data;
+ };
+
+ size_t GetPersistentNotificationCount() const {
+ return persistent_notifications_.size();
+ }
+
+ const PersistentNotification& GetPersistentNotificationAt(size_t index) {
+ DCHECK_LT(index, persistent_notifications_.size());
+ return persistent_notifications_[index];
+ }
+
+ // PlatformNotificationService implementation.
+ // ---------------------------------------------------------------------------
+
+ blink::WebNotificationPermission CheckPermissionOnUIThread(
+ BrowserContext* browser_context,
+ const GURL& origin,
+ int render_process_id) override {
+ // TODO(peter): Implement this method to enable browser tests for permission
+ // behavior of the Notification API.
+
+ return blink::WebNotificationPermissionAllowed;
+ }
+
+ blink::WebNotificationPermission CheckPermissionOnIOThread(
+ ResourceContext* resource_context,
+ const GURL& origin,
+ int render_process_id) override {
+ // TODO(peter): Implement this method to enable browser tests for behavior
+ // of the Notification.permission property.
+
+ return blink::WebNotificationPermissionAllowed;
+ }
+
+ void DisplayNotification(
+ BrowserContext* browser_context,
+ const GURL& origin,
+ const SkBitmap& icon,
+ const PlatformNotificationData& notification_data,
+ scoped_ptr<DesktopNotificationDelegate> delegate,
+ base::Closure* cancel_callback) override {
+ // TODO(peter): Implement this method to enable browser tests for non-
+ // persistent notifications.
+ }
+
+ void DisplayPersistentNotification(
+ BrowserContext* browser_context,
+ int64_t persistent_notification_id,
+ const GURL& origin,
+ const SkBitmap& icon,
+ const PlatformNotificationData& notification_data) override {
+ LOG(INFO) << "Shown a persistent notification.";
+
+ PersistentNotification notification;
+ notification.browser_context = browser_context;
+ notification.persistent_notification_id = persistent_notification_id;
+ notification.origin = origin;
+ notification.icon = icon;
+ notification.notification_data = notification_data;
+
+ persistent_notifications_.push_back(notification);
+ }
+
+ void ClosePersistentNotification(
+ BrowserContext* browser_context,
+ int64_t persistent_notification_id) override {
+ LOG(INFO) << "Closed a persistent notification.";
+
+ for (auto iter = persistent_notifications_.begin();
+ iter != persistent_notifications_.end(); ++iter) {
+ const PersistentNotification& notification = *iter;
+
+ if (notification.persistent_notification_id != persistent_notification_id)
+ continue;
+
+ persistent_notifications_.erase(iter);
+ }
+ }
+
+ private:
+ std::vector<PersistentNotification> persistent_notifications_;
+};
+
+} // namespace
+
+class NotificationBrowserTest : public ContentBrowserTest {
+ public:
+ void SetUp() override {
+ NotificationMessageFilter::SetNotificationServiceForTests(&service_);
+
+ https_server_.reset(new net::SpawnedTestServer(
+ net::SpawnedTestServer::TYPE_HTTPS,
+ net::BaseTestServer::SSLOptions(
+ net::BaseTestServer::SSLOptions::CERT_OK),
+ base::FilePath(FILE_PATH_LITERAL("content/test/data"))));
+
+ ASSERT_TRUE(https_server_->Start());
+
+ ContentBrowserTest::SetUp();
+ }
+
+ void TearDown() override {
+ NotificationMessageFilter::SetNotificationServiceForTests(nullptr);
+
+ ContentBrowserTest::TearDown();
+ }
+
+ protected:
+ // Provide an alias to prevent long verbose code in the unit tests.
+ using PersistentNotification =
+ FakePlatformNotificationService::PersistentNotification;
+
+ // Loads the test page used for Web Notifications and waits until the
+ // navigation has finished.
+ void LoadTestPageAndWait() {
+ ASSERT_TRUE(NavigateToURL(shell(),
+ https_server_->GetURL(kNotificationPage)));
+ }
+
+ // Executes |script| and asserts that the result is the string "ok".
+ void ExecuteScriptAndWait(const std::string& script) {
+ RenderFrameHost* render_frame_host =
+ shell()->web_contents()->GetMainFrame();
+
+ std::string result;
+ ASSERT_TRUE(ExecuteScriptAndExtractString(render_frame_host,
+ script,
+ &result));
+
+ ASSERT_EQ("ok", result);
+ }
+
+ // Returns the fake PlatformNotificationService being used by the test.
+ FakePlatformNotificationService* service() {
+ return &service_;
+ }
+
+ private:
+ FakePlatformNotificationService service_;
+
+ scoped_ptr<net::SpawnedTestServer> https_server_;
+};
+
+IN_PROC_BROWSER_TEST_F(NotificationBrowserTest, DisplayPersistentNotification) {
+ ASSERT_NO_FATAL_FAILURE(LoadTestPageAndWait());
+ ASSERT_NO_FATAL_FAILURE(ExecuteScriptAndWait(
+ "DisplayPersistentNotification('My Notification');"));
+
+ ASSERT_EQ(1u, service()->GetPersistentNotificationCount());
+
+ const auto& notification = service()->GetPersistentNotificationAt(0);
+ EXPECT_EQ(1, notification.persistent_notification_id);
+}
+
+} // namespace content
« no previous file with comments | « no previous file | content/browser/notifications/notification_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698