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_backend.h" |
+#include "chrome/browser/history/history.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" |
@@ -175,9 +178,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); |
mattm
2011/05/17 03:17:01
It looks like RenderViewHostTestHarness already cr
kewang
2011/05/18 05:47:40
Yes, and it got reset in SetUp() too. Remove the d
|
+ profile_->CreateHistoryService(false, false); |
mattm
2011/05/17 03:17:01
include arg name comments (like false /* delete_fi
kewang
2011/05/18 05:47:40
Done.
|
} |
virtual void TearDown() { |
+ profile_.reset(); |
mattm
2011/05/17 03:17:01
Unnecessary, unless there is some reason you need
kewang
2011/05/18 05:47:40
Done.
|
io_thread_.Stop(); |
RenderViewHostTestHarness::TearDown(); |
} |
@@ -200,6 +207,10 @@ |
return sb_service_->GetSerialized(); |
} |
+ HistoryService* history_service() { |
+ return profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); |
+ } |
+ |
protected: |
void InitResource(SafeBrowsingService::UnsafeResource* resource, |
ResourceType::Type resource_type, |
@@ -278,9 +289,18 @@ |
} |
} |
+ // Adds a page to history. |
mattm
2011/05/17 03:17:01
Add a comment about the expected order of redirect
kewang
2011/05/18 05:47:40
Done.
|
+ 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_; |
mattm
2011/05/17 03:17:01
RenderViewHostTestHarness already has a profile_ m
kewang
2011/05/18 05:47:40
removed.
|
}; |
// Tests creating a simple malware report. |
@@ -592,3 +612,62 @@ |
VerifyResults(actual, expected); |
} |
+ |
+// Test getting redirects from history service |
Paweł Hajdan Jr.
2011/05/17 15:13:54
nit: Dot at the end please.
kewang
2011/05/18 05:47:40
Done.
|
+TEST_F(MalwareDetailsTest, HistoryServiceUrls) { |
+ // Add content to history service |
Paweł Hajdan Jr.
2011/05/17 15:13:54
nit: Dot at the end.
kewang
2011/05/18 05:47:40
Done.
|
+ 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 |
mattm
2011/05/17 03:17:01
I was a bit confused since that's opposite the ord
Paweł Hajdan Jr.
2011/05/17 15:13:54
nit: Start with a capital letter and end with a do
kewang
2011/05/18 05:47:40
yes, history backend has a check: request->redirec
kewang
2011/05/18 05:47:40
Done.
|
+ redirects.push_back(baseurl); |
+ AddPageToHistory(baseurl, redirects); |
+ // Wait for history service operation finished |
Paweł Hajdan Jr.
2011/05/17 15:13:54
nit: Dot at the end.
kewang
2011/05/18 05:47:40
Done.
|
+ profile_->BlockUntilHistoryProcessesPendingRequests(); |
+ |
+ 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_->SetHistory(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 |
Paweł Hajdan Jr.
2011/05/17 15:13:54
nit: Dot at the end.
kewang
2011/05/18 05:47:40
Done.
|
+ 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_tag_name("redir"); |
+ pb_resource->set_url(kSecondRedirectURL); |
+ pb_resource = expected.add_resources(); |
+ pb_resource->set_id(3); |
+ pb_resource->set_tag_name("redir"); |
+ pb_resource->set_url(kFirstRedirectURL); |
+ |
+ VerifyResults(actual, expected); |
+} |