| Index: net/url_request/url_request_http_job_unittest.cc
|
| diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc
|
| index 713ae608e40a4247fe371c6903a28b595dd29784..932f7de95eb791a08ae9cac9c837dd2182b57953 100644
|
| --- a/net/url_request/url_request_http_job_unittest.cc
|
| +++ b/net/url_request/url_request_http_job_unittest.cc
|
| @@ -15,6 +15,7 @@
|
| #include "base/strings/string_split.h"
|
| #include "net/base/auth.h"
|
| #include "net/base/request_priority.h"
|
| +#include "net/base/sdch_observer.h"
|
| #include "net/base/test_data_directory.h"
|
| #include "net/cookies/cookie_store_test_helpers.h"
|
| #include "net/http/http_transaction_factory.h"
|
| @@ -606,6 +607,81 @@ TEST_F(URLRequestHttpJobTest, SdchAdvertisementPost) {
|
| EXPECT_FALSE(TransactionAcceptsSdchEncoding());
|
| }
|
|
|
| +class MockSdchObserver : public SdchObserver {
|
| + public:
|
| + MockSdchObserver() {}
|
| + MOCK_METHOD2(OnDictionaryAdded,
|
| + void(const GURL& request_url, const std::string& server_hash));
|
| + MOCK_METHOD1(OnDictionaryRemoved, void(const std::string& server_hash));
|
| + MOCK_METHOD1(OnDictionaryUsed, void(const std::string& server_hash));
|
| + MOCK_METHOD2(OnGetDictionary,
|
| + void(const GURL& request_url, const GURL& dictionary_url));
|
| + MOCK_METHOD0(OnClearDictionaries, void());
|
| +};
|
| +
|
| +class URLRequestHttpJobWithSdchSupportTest : public ::testing::Test {
|
| + protected:
|
| + URLRequestHttpJobWithSdchSupportTest() : context_(true) {
|
| + scoped_ptr<HttpNetworkSession::Params> params(
|
| + new HttpNetworkSession::Params);
|
| + context_.set_http_network_session_params(std::move(params));
|
| + context_.set_client_socket_factory(&socket_factory_);
|
| + context_.Init();
|
| + }
|
| +
|
| + MockClientSocketFactory socket_factory_;
|
| + TestURLRequestContext context_;
|
| +};
|
| +
|
| +TEST_F(URLRequestHttpJobWithSdchSupportTest, GetDictionary) {
|
| + MockWrite writes[] = {
|
| + MockWrite("GET / HTTP/1.1\r\n"
|
| + "Host: example.com\r\n"
|
| + "Connection: keep-alive\r\n"
|
| + "User-Agent:\r\n"
|
| + "Accept-Encoding: gzip, deflate, sdch\r\n"
|
| + "Accept-Language: en-us,fr\r\n\r\n")};
|
| +
|
| + MockRead reads[] = {MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Get-Dictionary: /sdch.dict\r\n"
|
| + "Cache-Control: max-age=120\r\n"
|
| + "Content-Length: 12\r\n\r\n"),
|
| + MockRead("Test Content")};
|
| + StaticSocketDataProvider socket_data(reads, arraysize(reads), writes,
|
| + arraysize(writes));
|
| + socket_factory_.AddSocketDataProvider(&socket_data);
|
| +
|
| + MockSdchObserver sdch_observer;
|
| + SdchManager sdch_manager;
|
| + sdch_manager.AddObserver(&sdch_observer);
|
| + context_.set_sdch_manager(&sdch_manager);
|
| +
|
| + // First response will be "from network" and we should have OnGetDictionary
|
| + // invoked.
|
| + GURL url("http://example.com");
|
| + EXPECT_CALL(sdch_observer,
|
| + OnGetDictionary(url, GURL("http://example.com/sdch.dict")));
|
| + TestDelegate delegate;
|
| + scoped_ptr<URLRequest> request =
|
| + context_.CreateRequest(url, DEFAULT_PRIORITY, &delegate);
|
| + request->Start();
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + EXPECT_TRUE(request->status().is_success());
|
| +
|
| + // Second response should be from cache without notification of SdchObserver
|
| + TestDelegate delegate2;
|
| + scoped_ptr<URLRequest> request2 =
|
| + context_.CreateRequest(url, DEFAULT_PRIORITY, &delegate2);
|
| + request2->Start();
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + EXPECT_TRUE(request->status().is_success());
|
| +
|
| + // Cleanup manager.
|
| + sdch_manager.RemoveObserver(&sdch_observer);
|
| +}
|
| +
|
| class URLRequestHttpJobWithBrotliSupportTest : public ::testing::Test {
|
| protected:
|
| URLRequestHttpJobWithBrotliSupportTest()
|
|
|