| Index: chrome/browser/net/sdch_browsertest.cc
|
| diff --git a/chrome/browser/net/sdch_browsertest.cc b/chrome/browser/net/sdch_browsertest.cc
|
| index 0dce279dbf60ea7768eb4553f53f5f27ad4c61eb..e929ac280a2f7d7d0cbba58a947180e9a4701cd1 100644
|
| --- a/chrome/browser/net/sdch_browsertest.cc
|
| +++ b/chrome/browser/net/sdch_browsertest.cc
|
| @@ -34,6 +34,7 @@
|
| #include "content/public/test/test_utils.h"
|
| #include "crypto/sha2.h"
|
| #include "net/base/sdch_manager.h"
|
| +#include "net/base/sdch_observer.h"
|
| #include "net/http/http_response_headers.h"
|
| #include "net/test/embedded_test_server/embedded_test_server.h"
|
| #include "net/test/embedded_test_server/http_request.h"
|
| @@ -259,7 +260,9 @@ class SdchResponseHandler {
|
| base::WeakPtrFactory<SdchResponseHandler> weak_ptr_factory_;
|
| };
|
|
|
| -class SdchBrowserTest : public InProcessBrowserTest, net::URLFetcherDelegate {
|
| +class SdchBrowserTest : public InProcessBrowserTest,
|
| + public net::URLFetcherDelegate,
|
| + public net::SdchObserver {
|
| public:
|
| static const char kTestHost[];
|
|
|
| @@ -351,8 +354,10 @@ class SdchBrowserTest : public InProcessBrowserTest, net::URLFetcherDelegate {
|
| int fetches = -1;
|
| base::RunLoop run_loop;
|
| content::BrowserThread::PostTaskAndReply(
|
| - content::BrowserThread::IO, FROM_HERE,
|
| + content::BrowserThread::IO,
|
| + FROM_HERE,
|
| base::Bind(&SdchBrowserTest::GetNumberOfDictionaryFetchesOnIOThread,
|
| + base::Unretained(this),
|
| base::Unretained(profile->GetRequestContext()),
|
| &fetches),
|
| run_loop.QuitClosure());
|
| @@ -405,10 +410,36 @@ class SdchBrowserTest : public InProcessBrowserTest, net::URLFetcherDelegate {
|
| second_browser_->tab_strip_model()->GetActiveWebContents());
|
| second_browser_->window()->Show();
|
|
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::IO,
|
| + FROM_HERE,
|
| + base::Bind(&SdchBrowserTest::SubscribeToSdchNotifications,
|
| + base::Unretained(this),
|
| + make_scoped_refptr(
|
| + second_browser_->profile()->GetRequestContext())));
|
| +
|
| + return true;
|
| + }
|
| +
|
| + bool SetupIncognitoBrowser() {
|
| + incognito_browser_ = CreateIncognitoBrowser();
|
| +
|
| + if (!incognito_browser_)
|
| + return false;
|
| +
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::IO,
|
| + FROM_HERE,
|
| + base::Bind(&SdchBrowserTest::SubscribeToSdchNotifications,
|
| + base::Unretained(this),
|
| + make_scoped_refptr(
|
| + incognito_browser_->profile()->GetRequestContext())));
|
| +
|
| return true;
|
| }
|
|
|
| Browser* second_browser() { return second_browser_; }
|
| + Browser* incognito_browser() { return incognito_browser_; }
|
|
|
| // Server information and control.
|
|
|
| @@ -509,14 +540,16 @@ class SdchBrowserTest : public InProcessBrowserTest, net::URLFetcherDelegate {
|
| sdch_manager->ClearData();
|
| }
|
|
|
| - static void GetNumberOfDictionaryFetchesOnIOThread(
|
| - net::URLRequestContextGetter* url_request_context_getter,
|
| + void GetNumberOfDictionaryFetchesOnIOThread(
|
| + net::URLRequestContextGetter* context_getter,
|
| int* result) {
|
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
| - net::SdchManager* sdch_manager =
|
| - url_request_context_getter->GetURLRequestContext()->sdch_manager();
|
| - DCHECK(sdch_manager);
|
| - *result = sdch_manager->GetFetchesCountForTesting();
|
| +
|
| + net::SdchManager* manager(
|
| + context_getter->GetURLRequestContext()->sdch_manager());
|
| + DCHECK(fetch_counts_.end() != fetch_counts_.find(manager));
|
| +
|
| + *result = fetch_counts_[manager];
|
| }
|
|
|
| // InProcessBrowserTest
|
| @@ -536,12 +569,57 @@ class SdchBrowserTest : public InProcessBrowserTest, net::URLFetcherDelegate {
|
| base::Unretained(&response_handler_)));
|
| CHECK(test_server_.InitializeAndWaitUntilReady());
|
| url_request_context_getter_ = browser()->profile()->GetRequestContext();
|
| +
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::IO,
|
| + FROM_HERE,
|
| + base::Bind(&SdchBrowserTest::SubscribeToSdchNotifications,
|
| + base::Unretained(this),
|
| + url_request_context_getter_));
|
| }
|
|
|
| void TearDownOnMainThread() override {
|
| CHECK(test_server_.ShutdownAndWaitUntilComplete());
|
| +
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::IO,
|
| + FROM_HERE,
|
| + base::Bind(&SdchBrowserTest::UnsubscribeFromAllSdchNotifications,
|
| + base::Unretained(this)));
|
| + }
|
| +
|
| + void SubscribeToSdchNotifications(
|
| + net::URLRequestContextGetter* context_getter) {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
| +
|
| + net::SdchManager* manager =
|
| + context_getter->GetURLRequestContext()->sdch_manager();
|
| + DCHECK(fetch_counts_.end() == fetch_counts_.find(manager));
|
| +
|
| + fetch_counts_[manager] = 0;
|
| + manager->AddObserver(this);
|
| + }
|
| +
|
| + void UnsubscribeFromAllSdchNotifications() {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
| +
|
| + for (auto it = fetch_counts_.begin(); it != fetch_counts_.end(); ++it)
|
| + it->first->RemoveObserver(this);
|
| +
|
| + fetch_counts_.clear();
|
| }
|
|
|
| + // SdchObserver
|
| + void OnGetDictionary(net::SdchManager* manager,
|
| + const GURL& request_url,
|
| + const GURL& dictionary_url) override {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
| + DLOG(ERROR) << "Retrieving count of notifications from manager " << manager;
|
| + DCHECK(fetch_counts_.end() != fetch_counts_.find(manager));
|
| + ++fetch_counts_[manager];
|
| + }
|
| + void OnClearDictionaries(net::SdchManager* manager) override {}
|
| +
|
| // URLFetcherDelegate
|
| void OnURLFetchComplete(const net::URLFetcher* source) override {
|
| url_fetch_complete_ = true;
|
| @@ -558,6 +636,10 @@ class SdchBrowserTest : public InProcessBrowserTest, net::URLFetcherDelegate {
|
| base::ScopedTempDir second_profile_data_dir_;
|
| Profile* second_profile_;
|
| Browser* second_browser_;
|
| + Browser* incognito_browser_;
|
| +
|
| + // IO Thread access only.
|
| + std::map<net::SdchManager*, int> fetch_counts_;
|
| };
|
|
|
| const char SdchBrowserTest::kTestHost[] = "our.test.host.com";
|
| @@ -587,14 +669,14 @@ IN_PROC_BROWSER_TEST_F(SdchBrowserTest, BrowsingDataRemover) {
|
| IN_PROC_BROWSER_TEST_F(SdchBrowserTest, Isolation) {
|
| ASSERT_TRUE(ForceSdchDictionaryLoad(browser()));
|
| ASSERT_TRUE(SetupSecondBrowser());
|
| + ASSERT_TRUE(SetupIncognitoBrowser());
|
|
|
| // Data fetches from incognito or separate profiles should not be SDCH
|
| // encoded.
|
| bool sdch_encoding_used = true;
|
| - Browser* incognito_browser = CreateIncognitoBrowser();
|
| - EXPECT_TRUE(GetDataDetailed(
|
| - incognito_browser->profile()->GetRequestContext(),
|
| - &sdch_encoding_used));
|
| + EXPECT_TRUE(
|
| + GetDataDetailed(incognito_browser()->profile()->GetRequestContext(),
|
| + &sdch_encoding_used));
|
| EXPECT_FALSE(sdch_encoding_used);
|
|
|
| sdch_encoding_used = true;
|
| @@ -605,8 +687,8 @@ IN_PROC_BROWSER_TEST_F(SdchBrowserTest, Isolation) {
|
|
|
| // Confirm a dictionary loaded in incognito isn't visible in the main profile.
|
| IN_PROC_BROWSER_TEST_F(SdchBrowserTest, ReverseIsolation) {
|
| - Browser* incognito_browser = CreateIncognitoBrowser();
|
| - ASSERT_TRUE(ForceSdchDictionaryLoad(incognito_browser));
|
| + ASSERT_TRUE(SetupIncognitoBrowser());
|
| + ASSERT_TRUE(ForceSdchDictionaryLoad(incognito_browser()));
|
|
|
| // Data fetches on main browser should not be SDCH encoded.
|
| bool sdch_encoding_used = true;
|
|
|