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

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

Issue 6710004: Querying the history service to get the redirect information for urls.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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/malware_details_unittest.cc
===================================================================
--- chrome/browser/safe_browsing/malware_details_unittest.cc (revision 84048)
+++ chrome/browser/safe_browsing/malware_details_unittest.cc (working copy)
@@ -8,12 +8,15 @@
#include "base/time.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/safe_browsing/malware_details.h"
+#include "chrome/browser/safe_browsing/malware_details_history.h"
#include "chrome/browser/safe_browsing/report.pb.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/safe_browsing/safebrowsing_messages.h"
#include "chrome/test/test_url_request_context_getter.h"
#include "chrome/test/testing_profile.h"
#include "content/browser/browser_thread.h"
+#include "chrome/browser/history/history.h"
+#include "chrome/browser/history/history_backend.h"
#include "content/browser/renderer_host/test_render_view_host.h"
#include "content/browser/tab_contents/navigation_entry.h"
#include "content/browser/tab_contents/test_tab_contents.h"
@@ -52,6 +55,24 @@
namespace {
+// Used by WaitForHistory, see it for details.
+class WaitForHistoryTask : public HistoryDBTask {
+ public:
+ WaitForHistoryTask() {}
+
+ virtual bool RunOnDBThread(history::HistoryBackend* backend,
+ history::HistoryDatabase* db) {
+ return true;
+ }
+
+ virtual void DoneRunOnMainThread() {
+ MessageLoop::current()->Quit();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(WaitForHistoryTask);
+};
+
void WriteHeaders(disk_cache::Entry* entry, const std::string headers) {
net::HttpResponseInfo responseinfo;
std::string raw_headers = net::HttpUtil::AssembleRawHeaders(
@@ -175,9 +196,13 @@
// The URLFetcher checks that the messageloop type is IO.
ASSERT_TRUE(io_thread_.StartWithOptions(
base::Thread::Options(MessageLoop::TYPE_IO, 0)));
+
+ profile_.reset(new TestingProfile);
+ profile_->CreateHistoryService(false, false);
}
virtual void TearDown() {
+ profile_.reset();
io_thread_.Stop();
RenderViewHostTestHarness::TearDown();
}
@@ -200,6 +225,18 @@
return sb_service_->GetSerialized();
}
+ //TestingProfile* profile() {return profile_.get();}
+ HistoryService* history_service() {
+ return profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
+ }
+
+ // Blocks the caller until history processes a task. This is useful if you
+ // need to wait until you know history has processed a task.
+ void WaitForHistory() {
Paweł Hajdan Jr. 2011/05/14 09:33:49 Isn't that TestingProfile::BlockUntilHistoryProces
kewang 2011/05/16 07:11:51 Good to know this! Fixed.
+ history_service()->ScheduleDBTask(new WaitForHistoryTask(), &consumer_);
+ MessageLoop::current()->Run();
+ }
+
protected:
void InitResource(SafeBrowsingService::UnsafeResource* resource,
ResourceType::Type resource_type,
@@ -278,9 +315,19 @@
}
}
+ // Adds a page to history.
+ void AddPageToHistory(const GURL& url,
+ const history::RedirectList& redirects) {
+ history_service()->AddPage(
+ url, static_cast<void*>(this), 0, GURL(), PageTransition::TYPED,
+ redirects, history::SOURCE_BROWSED, false);
+ }
+
BrowserThread ui_thread_;
BrowserThread io_thread_;
scoped_refptr<MockSafeBrowsingService> sb_service_;
+ scoped_ptr<TestingProfile> profile_;
+ CancelableRequestConsumer consumer_;
};
// Tests creating a simple malware report.
@@ -592,3 +639,59 @@
VerifyResults(actual, expected);
}
+
+// Test getting redirects from history service
+TEST_F(MalwareDetailsTest, HistoryServiceUrls) {
+ // Add content to history service
+ GURL baseurl(kMalwareURL);
+ history::RedirectList redirects;
+ redirects.push_back(GURL(kFirstRedirectURL));
+ redirects.push_back(GURL(kSecondRedirectURL));
+ // the last item of the redirect chain has to be the final URL
+ redirects.push_back(baseurl);
+ AddPageToHistory(baseurl, redirects);
+ WaitForHistory();
+
+ controller().LoadURL(GURL(kLandingURL), GURL(), PageTransition::TYPED);
+
+ SafeBrowsingService::UnsafeResource resource;
+ InitResource(&resource, ResourceType::SUB_RESOURCE, GURL(kMalwareURL));
+ scoped_refptr<MalwareDetailsWrap> report = new MalwareDetailsWrap(
+ sb_service_.get(), contents(), resource, NULL);
+
+ // Reset the history service pointer
+ report->redirects_collector_->history_ = history_service();
+
+ // The redirects collection starts after the IPC from the DOM is fired.
+ std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> params;
+ report->OnReceivedMalwareDOMDetails(params);
+
+ // Let the redirects callbacks complete
+ MessageLoop::current()->RunAllPending();
+
+ std::string serialized = WaitForSerializedReport(report);
+ ClientMalwareReportRequest actual;
+ actual.ParseFromString(serialized);
+
+ ClientMalwareReportRequest expected;
+ expected.set_malware_url(kMalwareURL);
+ expected.set_page_url(kLandingURL);
+ expected.set_referrer_url("");
+
+ ClientMalwareReportRequest::Resource* pb_resource = expected.add_resources();
+ pb_resource->set_id(0);
+ pb_resource->set_url(kLandingURL);
+ pb_resource = expected.add_resources();
+ pb_resource->set_id(1);
+ pb_resource->set_parent_id(2);
+ pb_resource->set_url(kMalwareURL);
+ pb_resource = expected.add_resources();
+ pb_resource->set_id(2);
+ pb_resource->set_parent_id(3);
+ pb_resource->set_url(kSecondRedirectURL);
+ pb_resource = expected.add_resources();
+ pb_resource->set_id(3);
+ pb_resource->set_url(kFirstRedirectURL);
+
+ VerifyResults(actual, expected);
+}

Powered by Google App Engine
This is Rietveld 408576698