| Index: components/link_header_util/link_header_util_unittest.cc
|
| diff --git a/content/browser/service_worker/link_header_support_unittest.cc b/components/link_header_util/link_header_util_unittest.cc
|
| similarity index 50%
|
| copy from content/browser/service_worker/link_header_support_unittest.cc
|
| copy to components/link_header_util/link_header_util_unittest.cc
|
| index ae293fe720e7cb20056db06d13118ccba05bcb5b..adc3f6eb091a6bfd900a5b184cdf5064acf4fb4f 100644
|
| --- a/content/browser/service_worker/link_header_support_unittest.cc
|
| +++ b/components/link_header_util/link_header_util_unittest.cc
|
| @@ -2,27 +2,31 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "content/browser/service_worker/link_header_support.h"
|
| +#include "components/link_header_util/link_header_util.h"
|
|
|
| -#include "base/command_line.h"
|
| #include "base/logging.h"
|
| #include "base/run_loop.h"
|
| -#include "content/browser/service_worker/embedded_worker_test_helper.h"
|
| -#include "content/browser/service_worker/service_worker_context_wrapper.h"
|
| -#include "content/browser/service_worker/service_worker_registration.h"
|
| -#include "content/public/browser/resource_request_info.h"
|
| -#include "content/public/common/content_switches.h"
|
| -#include "content/public/test/mock_resource_context.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| -#include "net/http/http_response_headers.h"
|
| -#include "net/url_request/url_request_test_job.h"
|
| -#include "net/url_request/url_request_test_util.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| -namespace content {
|
| +namespace link_header_util {
|
|
|
| namespace {
|
|
|
| +void SplitLinkHeaderForTesting(const std::string& header,
|
| + std::vector<std::string>* values) {
|
| + std::vector<StringIteratorPair> values_iterators = SplitLinkHeader(header);
|
| + values->clear();
|
| + for (const auto& pair : values_iterators)
|
| + values->push_back(std::string(pair.first, pair.second));
|
| +}
|
| +
|
| +bool ParseLinkHeaderValueForTesting(
|
| + std::string value,
|
| + std::string* url,
|
| + std::unordered_map<std::string, base::Optional<std::string>>* params) {
|
| + return ParseLinkHeaderValue(value.begin(), value.end(), url, params);
|
| +}
|
| +
|
| TEST(LinkHeaderTest, SplitEmpty) {
|
| std::vector<std::string> values;
|
| SplitLinkHeaderForTesting("", &values);
|
| @@ -93,13 +97,13 @@ TEST_P(SimpleParseTest, Simple) {
|
| const SimpleParseTestData test = GetParam();
|
|
|
| std::string url;
|
| - std::unordered_map<std::string, std::string> params;
|
| + std::unordered_map<std::string, base::Optional<std::string>> params;
|
| EXPECT_EQ(test.valid,
|
| ParseLinkHeaderValueForTesting(test.link, &url, ¶ms));
|
| if (test.valid) {
|
| EXPECT_EQ(test.url, url);
|
| - EXPECT_EQ(test.rel, params["rel"]);
|
| - EXPECT_EQ(test.as, params["as"]);
|
| + EXPECT_EQ(test.rel, params["rel"].value_or(""));
|
| + EXPECT_EQ(test.as, params["as"].value_or(""));
|
| }
|
| }
|
|
|
| @@ -218,193 +222,6 @@ INSTANTIATE_TEST_CASE_P(LinkHeaderTest,
|
| SimpleParseTest,
|
| testing::ValuesIn(simple_parse_tests));
|
|
|
| -void SaveFoundRegistrationsCallback(
|
| - ServiceWorkerStatusCode expected_status,
|
| - bool* called,
|
| - std::vector<ServiceWorkerRegistrationInfo>* registrations,
|
| - ServiceWorkerStatusCode status,
|
| - const std::vector<ServiceWorkerRegistrationInfo>& result) {
|
| - EXPECT_EQ(expected_status, status);
|
| - *called = true;
|
| - *registrations = result;
|
| -}
|
| -
|
| -ServiceWorkerContextWrapper::GetRegistrationsInfosCallback
|
| -SaveFoundRegistrations(
|
| - ServiceWorkerStatusCode expected_status,
|
| - bool* called,
|
| - std::vector<ServiceWorkerRegistrationInfo>* registrations) {
|
| - *called = false;
|
| - return base::Bind(&SaveFoundRegistrationsCallback, expected_status, called,
|
| - registrations);
|
| -}
|
| -
|
| -class LinkHeaderServiceWorkerTest : public ::testing::Test {
|
| - public:
|
| - LinkHeaderServiceWorkerTest()
|
| - : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
|
| - resource_context_(&request_context_) {
|
| - base::CommandLine::ForCurrentProcess()->AppendSwitch(
|
| - switches::kEnableExperimentalWebPlatformFeatures);
|
| - }
|
| - ~LinkHeaderServiceWorkerTest() override {}
|
| -
|
| - void SetUp() override {
|
| - helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath()));
|
| - }
|
| -
|
| - void TearDown() override { helper_.reset(); }
|
| -
|
| - ServiceWorkerContextWrapper* context_wrapper() {
|
| - return helper_->context_wrapper();
|
| - }
|
| -
|
| - void ProcessLinkHeader(const GURL& request_url,
|
| - const std::string& link_header) {
|
| - scoped_ptr<net::URLRequest> request = request_context_.CreateRequest(
|
| - request_url, net::DEFAULT_PRIORITY, &request_delegate_);
|
| - ResourceRequestInfo::AllocateForTesting(
|
| - request.get(), RESOURCE_TYPE_SCRIPT, &resource_context_,
|
| - -1 /* render_process_id */, -1 /* render_view_id */,
|
| - -1 /* render_frame_id */, false /* is_main_frame */,
|
| - false /* parent_is_main_frame */, true /* allow_download */,
|
| - true /* is_async */, false /* is_using_lofi */);
|
| -
|
| - ProcessLinkHeaderForRequest(request.get(), link_header, context_wrapper());
|
| - base::RunLoop().RunUntilIdle();
|
| - }
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> GetRegistrations() {
|
| - bool called;
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations;
|
| - context_wrapper()->GetAllRegistrations(
|
| - SaveFoundRegistrations(SERVICE_WORKER_OK, &called, ®istrations));
|
| - base::RunLoop().RunUntilIdle();
|
| - EXPECT_TRUE(called);
|
| - return registrations;
|
| - }
|
| -
|
| - private:
|
| - TestBrowserThreadBundle thread_bundle_;
|
| - scoped_ptr<EmbeddedWorkerTestHelper> helper_;
|
| - net::TestURLRequestContext request_context_;
|
| - net::TestDelegate request_delegate_;
|
| - MockResourceContext resource_context_;
|
| -};
|
| -
|
| -TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_Basic) {
|
| - ProcessLinkHeader(GURL("https://example.com/foo/bar/"),
|
| - "<../foo.js>; rel=serviceworker");
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations();
|
| - ASSERT_EQ(1u, registrations.size());
|
| - EXPECT_EQ(GURL("https://example.com/foo/"), registrations[0].pattern);
|
| - EXPECT_EQ(GURL("https://example.com/foo/foo.js"),
|
| - registrations[0].active_version.script_url);
|
| -}
|
| -
|
| -TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScopeWithFragment) {
|
| - ProcessLinkHeader(GURL("https://example.com/foo/bar/"),
|
| - "<../bar.js>; rel=serviceworker; scope=\"scope#ref\"");
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations();
|
| - ASSERT_EQ(1u, registrations.size());
|
| - EXPECT_EQ(GURL("https://example.com/foo/bar/scope"),
|
| - registrations[0].pattern);
|
| - EXPECT_EQ(GURL("https://example.com/foo/bar.js"),
|
| - registrations[0].active_version.script_url);
|
| -}
|
| -
|
| -TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScopeAbsoluteUrl) {
|
| - ProcessLinkHeader(GURL("https://example.com/foo/bar/"),
|
| - "<bar.js>; rel=serviceworker; "
|
| - "scope=\"https://example.com:443/foo/bar/scope\"");
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations();
|
| - ASSERT_EQ(1u, registrations.size());
|
| - EXPECT_EQ(GURL("https://example.com/foo/bar/scope"),
|
| - registrations[0].pattern);
|
| - EXPECT_EQ(GURL("https://example.com/foo/bar/bar.js"),
|
| - registrations[0].active_version.script_url);
|
| -}
|
| -
|
| -TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScopeDifferentOrigin) {
|
| - ProcessLinkHeader(
|
| - GURL("https://example.com/foobar/"),
|
| - "<bar.js>; rel=serviceworker; scope=\"https://google.com/scope\"");
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations();
|
| - ASSERT_EQ(0u, registrations.size());
|
| -}
|
| -
|
| -TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScopeUrlEncodedSlash) {
|
| - ProcessLinkHeader(GURL("https://example.com/foobar/"),
|
| - "<bar.js>; rel=serviceworker; scope=\"./foo%2Fbar\"");
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations();
|
| - ASSERT_EQ(0u, registrations.size());
|
| -}
|
| -
|
| -TEST_F(LinkHeaderServiceWorkerTest,
|
| - InstallServiceWorker_ScriptUrlEncodedSlash) {
|
| - ProcessLinkHeader(GURL("https://example.com/foobar/"),
|
| - "<foo%2Fbar.js>; rel=serviceworker");
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations();
|
| - ASSERT_EQ(0u, registrations.size());
|
| -}
|
| -
|
| -TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_ScriptAbsoluteUrl) {
|
| - ProcessLinkHeader(
|
| - GURL("https://example.com/foobar/"),
|
| - "<https://example.com/bar.js>; rel=serviceworker; scope=foo");
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations();
|
| - ASSERT_EQ(1u, registrations.size());
|
| - EXPECT_EQ(GURL("https://example.com/foobar/foo"), registrations[0].pattern);
|
| - EXPECT_EQ(GURL("https://example.com/bar.js"),
|
| - registrations[0].active_version.script_url);
|
| -}
|
| -
|
| -TEST_F(LinkHeaderServiceWorkerTest,
|
| - InstallServiceWorker_ScriptDifferentOrigin) {
|
| - ProcessLinkHeader(
|
| - GURL("https://example.com/foobar/"),
|
| - "<https://google.com/bar.js>; rel=serviceworker; scope=foo");
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations();
|
| - ASSERT_EQ(0u, registrations.size());
|
| -}
|
| -
|
| -TEST_F(LinkHeaderServiceWorkerTest, InstallServiceWorker_MultipleWorkers) {
|
| - ProcessLinkHeader(GURL("https://example.com/foobar/"),
|
| - "<bar.js>; rel=serviceworker; scope=foo, <baz.js>; "
|
| - "rel=serviceworker; scope=scope");
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations();
|
| - ASSERT_EQ(2u, registrations.size());
|
| - EXPECT_EQ(GURL("https://example.com/foobar/foo"), registrations[0].pattern);
|
| - EXPECT_EQ(GURL("https://example.com/foobar/bar.js"),
|
| - registrations[0].active_version.script_url);
|
| - EXPECT_EQ(GURL("https://example.com/foobar/scope"), registrations[1].pattern);
|
| - EXPECT_EQ(GURL("https://example.com/foobar/baz.js"),
|
| - registrations[1].active_version.script_url);
|
| -}
|
| -
|
| -TEST_F(LinkHeaderServiceWorkerTest,
|
| - InstallServiceWorker_ValidAndInvalidValues) {
|
| - ProcessLinkHeader(
|
| - GURL("https://example.com/foobar/"),
|
| - "<https://google.com/bar.js>; rel=serviceworker; scope=foo, <baz.js>; "
|
| - "rel=serviceworker; scope=scope");
|
| -
|
| - std::vector<ServiceWorkerRegistrationInfo> registrations = GetRegistrations();
|
| - ASSERT_EQ(1u, registrations.size());
|
| - EXPECT_EQ(GURL("https://example.com/foobar/scope"), registrations[0].pattern);
|
| - EXPECT_EQ(GURL("https://example.com/foobar/baz.js"),
|
| - registrations[0].active_version.script_url);
|
| -}
|
| -
|
| } // namespace
|
|
|
| -} // namespace content
|
| +} // namespace link_header_util
|
|
|