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

Unified Diff: chrome/browser/notifications/desktop_notification_service_unittest.cc

Issue 14197014: Add TestBrowserThreadBundle into RenderViewHostTestHarness. Kill some unnecessary real threads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged ToT Created 7 years, 6 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
Index: chrome/browser/notifications/desktop_notification_service_unittest.cc
diff --git a/chrome/browser/notifications/desktop_notification_service_unittest.cc b/chrome/browser/notifications/desktop_notification_service_unittest.cc
index a9626e029e90dd086f93208d5633a15423ae5654..f99bf201dc9045ca696d079abad87044e72fc1e0 100644
--- a/chrome/browser/notifications/desktop_notification_service_unittest.cc
+++ b/chrome/browser/notifications/desktop_notification_service_unittest.cc
@@ -15,109 +15,16 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebNotificationPresenter.h"
-using content::BrowserThread;
-
-namespace {
-
-// The HasPermission method of the DesktopNotificationService wants to be called
-// on the IO thread. This class routes calls to the cache on the IO thread.
-class ThreadProxy : public base::RefCountedThreadSafe<ThreadProxy> {
- public:
- ThreadProxy()
- : io_event_(false, false),
- ui_event_(false, false),
- permission_(WebKit::WebNotificationPresenter::PermissionAllowed) {
- // The current message loop was already initalized by the test superclass.
- ui_thread_.reset(
- new content::TestBrowserThread(BrowserThread::UI,
- base::MessageLoop::current()));
-
- // Create IO thread, start its message loop.
- io_thread_.reset(new content::TestBrowserThread(BrowserThread::IO));
- io_thread_->Start();
-
- // Calling PauseIOThread() here isn't safe, because the runnable method
- // could complete before the constructor is done, deleting |this|.
- }
-
- // Call the HasPermission method of the DesktopNotificationService on the IO
- // thread and returns the permission setting.
- WebKit::WebNotificationPresenter::Permission ServiceHasPermission(
- DesktopNotificationService* service,
- const GURL& url) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- base::Bind(&ThreadProxy::ServiceHasPermissionIO, this, service, url));
- io_event_.Signal();
- ui_event_.Wait(); // Wait for IO thread to be done.
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- base::Bind(&ThreadProxy::PauseIOThreadIO, this));
-
- return permission_;
- }
-
- void PauseIOThread() {
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- base::Bind(&ThreadProxy::PauseIOThreadIO, this));
- }
-
- void DrainIOThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- io_event_.Signal();
- io_thread_->Stop();
- }
-
- private:
- friend class base::RefCountedThreadSafe<ThreadProxy>;
- ~ThreadProxy() {
- DrainIOThread();
- }
-
- void PauseIOThreadIO() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- io_event_.Wait();
- }
-
- void ServiceHasPermissionIO(DesktopNotificationService* service,
- const GURL& url) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- permission_ = service->HasPermission(url);
- ui_event_.Signal();
- }
-
- base::WaitableEvent io_event_;
- base::WaitableEvent ui_event_;
- scoped_ptr<content::TestBrowserThread> ui_thread_;
- scoped_ptr<content::TestBrowserThread> io_thread_;
-
- WebKit::WebNotificationPresenter::Permission permission_;
-};
-
-} // namespace
-
class DesktopNotificationServiceTest : public ChromeRenderViewHostTestHarness {
- public:
- DesktopNotificationServiceTest() {
- }
-
+ protected:
virtual void SetUp() {
ChromeRenderViewHostTestHarness::SetUp();
- proxy_ = new ThreadProxy;
- proxy_->PauseIOThread();
// Creates the destop notification service.
service_ = DesktopNotificationServiceFactory::GetForProfile(profile());
}
- virtual void TearDown() {
- // The io thread's waiting on the io_event_ might hold a ref to |proxy_|,
- // preventing its destruction. Clear that ref.
- proxy_->DrainIOThread();
- ChromeRenderViewHostTestHarness::TearDown();
- }
-
DesktopNotificationService* service_;
- scoped_refptr<ThreadProxy> proxy_;
};
TEST_F(DesktopNotificationServiceTest, SettingsForSchemes) {
@@ -126,36 +33,36 @@ TEST_F(DesktopNotificationServiceTest, SettingsForSchemes) {
EXPECT_EQ(CONTENT_SETTING_ASK,
service_->GetDefaultContentSetting(NULL));
EXPECT_EQ(WebKit::WebNotificationPresenter::PermissionNotAllowed,
- proxy_->ServiceHasPermission(service_, url));
+ service_->HasPermission(url));
service_->GrantPermission(url);
EXPECT_EQ(WebKit::WebNotificationPresenter::PermissionAllowed,
- proxy_->ServiceHasPermission(service_, url));
+ service_->HasPermission(url));
service_->DenyPermission(url);
EXPECT_EQ(WebKit::WebNotificationPresenter::PermissionDenied,
- proxy_->ServiceHasPermission(service_, url));
+ service_->HasPermission(url));
GURL https_url("https://testurl");
GURL http_url("http://testurl");
EXPECT_EQ(CONTENT_SETTING_ASK,
service_->GetDefaultContentSetting(NULL));
EXPECT_EQ(WebKit::WebNotificationPresenter::PermissionNotAllowed,
- proxy_->ServiceHasPermission(service_, http_url));
+ service_->HasPermission(http_url));
EXPECT_EQ(WebKit::WebNotificationPresenter::PermissionNotAllowed,
- proxy_->ServiceHasPermission(service_, https_url));
+ service_->HasPermission(https_url));
service_->GrantPermission(https_url);
EXPECT_EQ(WebKit::WebNotificationPresenter::PermissionNotAllowed,
- proxy_->ServiceHasPermission(service_, http_url));
+ service_->HasPermission(http_url));
EXPECT_EQ(WebKit::WebNotificationPresenter::PermissionAllowed,
- proxy_->ServiceHasPermission(service_, https_url));
+ service_->HasPermission(https_url));
service_->DenyPermission(http_url);
EXPECT_EQ(WebKit::WebNotificationPresenter::PermissionDenied,
- proxy_->ServiceHasPermission(service_, http_url));
+ service_->HasPermission(http_url));
EXPECT_EQ(WebKit::WebNotificationPresenter::PermissionAllowed,
- proxy_->ServiceHasPermission(service_, https_url));
+ service_->HasPermission(https_url));
}
TEST_F(DesktopNotificationServiceTest, GetNotificationsSettings) {

Powered by Google App Engine
This is Rietveld 408576698