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

Unified Diff: chrome/browser/safe_browsing/safe_browsing_blocking_page.cc

Issue 56135: Adding unit tests for the SafeBrowsingBlockingPage class (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 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
Index: chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
===================================================================
--- chrome/browser/safe_browsing/safe_browsing_blocking_page.cc (revision 12779)
+++ chrome/browser/safe_browsing/safe_browsing_blocking_page.cc (working copy)
@@ -49,6 +49,30 @@
static const char* const kProceedCommand = "proceed";
static const char* const kTakeMeBackCommand = "takeMeBack";
+// static
+SafeBrowsingBlockingPageFactory* SafeBrowsingBlockingPage::factory_ = NULL;
+
+// The default SafeBrowsingBlockingPageFactory. Global, made a singleton so we
+// don't leak it.
+class SafeBrowsingBlockingPageFactoryImpl
+ : public SafeBrowsingBlockingPageFactory {
+ public:
+ SafeBrowsingBlockingPage* CreateSafeBrowsingPage(
+ SafeBrowsingService* service,
+ WebContents* web_contents,
+ const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) {
+ return new SafeBrowsingBlockingPage(service, web_contents,
+ unsafe_resources);
+ }
+
+ private:
+ friend struct DefaultSingletonTraits<SafeBrowsingBlockingPageFactoryImpl>;
+
+ SafeBrowsingBlockingPageFactoryImpl() { }
+
+ DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPageFactoryImpl);
+};
+
SafeBrowsingBlockingPage::SafeBrowsingBlockingPage(
SafeBrowsingService* sb_service,
WebContents* web_contents,
@@ -349,8 +373,8 @@
// Build an interstitial for all the unsafe resources notifications.
// Don't show it now as showing an interstitial while an interstitial is
// already showing would cause DontProceed() to be invoked.
- blocking_page = new SafeBrowsingBlockingPage(sb_service_, tab(),
- iter->second);
+ blocking_page = factory_->CreateSafeBrowsingPage(sb_service_, tab(),
+ iter->second);
unsafe_resource_map->erase(iter);
}
@@ -391,11 +415,13 @@
SafeBrowsingService* sb_service,
const UnsafeResourceList& unsafe_resources,
bool proceed) {
- base::Thread* io_thread = g_browser_process->io_thread();
- if (!io_thread)
- return;
+ MessageLoop* message_loop;
+ if (g_browser_process->io_thread())
+ message_loop = g_browser_process->io_thread()->message_loop();
+ else // For unit-tests, just post on the current thread.
+ message_loop = MessageLoop::current();
- io_thread->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
+ message_loop->PostTask(FROM_HERE, NewRunnableMethod(
sb_service, &SafeBrowsingService::OnBlockingPageDone, unsafe_resources,
proceed));
}
@@ -418,8 +444,12 @@
// show this interstitial.
std::vector<SafeBrowsingService::UnsafeResource> resources;
resources.push_back(unsafe_resource);
+ // Set up the factory if this has not been done already (tests do that
+ // before this method is called).
+ if (!factory_)
+ factory_ = Singleton<SafeBrowsingBlockingPageFactoryImpl>::get();
SafeBrowsingBlockingPage* blocking_page =
- new SafeBrowsingBlockingPage(sb_service, web_contents, resources);
+ factory_->CreateSafeBrowsingPage(sb_service, web_contents, resources);
blocking_page->Show();
return;
}

Powered by Google App Engine
This is Rietveld 408576698