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

Side by Side Diff: content/browser/service_worker/service_worker_provider_host_unittest.cc

Issue 2653493009: Add two interfaces for ServiceWorkerProviderContext/ProviderHost (Closed)
Patch Set: Rebased Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_provider_host.h" 5 #include "content/browser/service_worker/service_worker_provider_host.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/memory/weak_ptr.h" 12 #include "base/memory/weak_ptr.h"
13 #include "base/threading/thread_task_runner_handle.h" 13 #include "base/threading/thread_task_runner_handle.h"
14 #include "content/browser/service_worker/embedded_worker_test_helper.h" 14 #include "content/browser/service_worker/embedded_worker_test_helper.h"
15 #include "content/browser/service_worker/service_worker_context_core.h" 15 #include "content/browser/service_worker/service_worker_context_core.h"
16 #include "content/browser/service_worker/service_worker_register_job.h" 16 #include "content/browser/service_worker/service_worker_register_job.h"
17 #include "content/browser/service_worker/service_worker_registration.h" 17 #include "content/browser/service_worker/service_worker_registration.h"
18 #include "content/browser/service_worker/service_worker_test_utils.h" 18 #include "content/browser/service_worker/service_worker_test_utils.h"
19 #include "content/browser/service_worker/service_worker_version.h" 19 #include "content/browser/service_worker/service_worker_version.h"
20 #include "content/common/url_schemes.h" 20 #include "content/common/url_schemes.h"
21 #include "content/public/common/browser_side_navigation_policy.h"
21 #include "content/public/common/origin_util.h" 22 #include "content/public/common/origin_util.h"
22 #include "content/public/test/test_browser_thread_bundle.h" 23 #include "content/public/test/test_browser_thread_bundle.h"
23 #include "content/public/test/test_utils.h" 24 #include "content/public/test/test_utils.h"
24 #include "content/test/test_content_browser_client.h" 25 #include "content/test/test_content_browser_client.h"
25 #include "content/test/test_content_client.h" 26 #include "content/test/test_content_client.h"
26 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
27 28
28 namespace content { 29 namespace content {
29 30
30 const char kServiceWorkerScheme[] = "i-can-use-service-worker"; 31 const char kServiceWorkerScheme[] = "i-can-use-service-worker";
31 32
32 class ServiceWorkerTestContentClient : public TestContentClient { 33 class ServiceWorkerTestContentClient : public TestContentClient {
33 public: 34 public:
34 void AddAdditionalSchemes(Schemes* schemes) override { 35 void AddAdditionalSchemes(Schemes* schemes) override {
35 schemes->service_worker_schemes.push_back(kServiceWorkerScheme); 36 schemes->service_worker_schemes.push_back(kServiceWorkerScheme);
36 } 37 }
37 }; 38 };
38 39
39 class ServiceWorkerProviderHostTest : public testing::Test { 40 class ServiceWorkerProviderHostTest : public testing::Test {
40 protected: 41 protected:
41 ServiceWorkerProviderHostTest() 42 ServiceWorkerProviderHostTest()
42 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), 43 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
43 next_provider_id_(1) { 44 next_renderer_provided_id_(1),
45 next_browser_provided_id_(-2) {
44 SetContentClient(&test_content_client_); 46 SetContentClient(&test_content_client_);
45 } 47 }
46 ~ServiceWorkerProviderHostTest() override {} 48 ~ServiceWorkerProviderHostTest() override {}
47 49
48 void SetUp() override { 50 void SetUp() override {
49 old_content_browser_client_ = 51 old_content_browser_client_ =
50 SetBrowserClientForTesting(&test_content_browser_client_); 52 SetBrowserClientForTesting(&test_content_browser_client_);
51 ResetSchemesAndOriginsWhitelist(); 53 ResetSchemesAndOriginsWhitelist();
52 54
53 helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath())); 55 helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath()));
(...skipping 14 matching lines...) Expand all
68 SetBrowserClientForTesting(old_content_browser_client_); 70 SetBrowserClientForTesting(old_content_browser_client_);
69 // Reset cached security schemes so we don't affect other tests. 71 // Reset cached security schemes so we don't affect other tests.
70 ResetSchemesAndOriginsWhitelist(); 72 ResetSchemesAndOriginsWhitelist();
71 } 73 }
72 74
73 bool PatternHasProcessToRun(const GURL& pattern) const { 75 bool PatternHasProcessToRun(const GURL& pattern) const {
74 return context_->process_manager()->PatternHasProcessToRun(pattern); 76 return context_->process_manager()->PatternHasProcessToRun(pattern);
75 } 77 }
76 78
77 ServiceWorkerProviderHost* CreateProviderHost(const GURL& document_url) { 79 ServiceWorkerProviderHost* CreateProviderHost(const GURL& document_url) {
78 std::unique_ptr<ServiceWorkerProviderHost> host = 80 remote_endpoints_.emplace_back();
79 CreateProviderHostForWindow( 81 std::unique_ptr<ServiceWorkerProviderHost> host;
80 helper_->mock_render_process_id(), next_provider_id_++, 82 if (IsBrowserSideNavigationEnabled()) {
81 true /* is_parent_frame_secure */, helper_->context()->AsWeakPtr()); 83 host = ServiceWorkerProviderHost::PreCreateNavigationHost(
84 helper_->context()->AsWeakPtr(), true,
85 base::Callback<WebContents*(void)>());
86 ServiceWorkerProviderHostInfo info(next_browser_provided_id_--,
87 1 /* route_id */,
88 SERVICE_WORKER_PROVIDER_FOR_WINDOW,
89 true /* is_parent_frame_secure */);
90 remote_endpoints_.back().BindWithProviderHostInfo(&info);
91 host->CompleteNavigationInitialized(helper_->mock_render_process_id(),
92 std::move(info), nullptr);
93 } else {
94 host = CreateProviderHostForWindow(
95 helper_->mock_render_process_id(), next_renderer_provided_id_++,
96 true /* is_parent_frame_secure */, helper_->context()->AsWeakPtr(),
97 &remote_endpoints_.back());
98 }
99
82 ServiceWorkerProviderHost* host_raw = host.get(); 100 ServiceWorkerProviderHost* host_raw = host.get();
83 host->SetDocumentUrl(document_url); 101 host->SetDocumentUrl(document_url);
84 context_->AddProviderHost(std::move(host)); 102 context_->AddProviderHost(std::move(host));
85 return host_raw; 103 return host_raw;
86 } 104 }
87 105
88 ServiceWorkerProviderHost* CreateProviderHostWithInsecureParentFrame( 106 ServiceWorkerProviderHost* CreateProviderHostWithInsecureParentFrame(
89 const GURL& document_url) { 107 const GURL& document_url) {
108 remote_endpoints_.emplace_back();
90 std::unique_ptr<ServiceWorkerProviderHost> host = 109 std::unique_ptr<ServiceWorkerProviderHost> host =
91 CreateProviderHostForWindow(helper_->mock_render_process_id(), 110 CreateProviderHostForWindow(
92 next_provider_id_++, 111 helper_->mock_render_process_id(), next_renderer_provided_id_++,
93 false /* is_parent_frame_secure */, 112 false /* is_parent_frame_secure */, helper_->context()->AsWeakPtr(),
94 helper_->context()->AsWeakPtr()); 113 &remote_endpoints_.back());
95 ServiceWorkerProviderHost* host_raw = host.get(); 114 ServiceWorkerProviderHost* host_raw = host.get();
96 host->SetDocumentUrl(document_url); 115 host->SetDocumentUrl(document_url);
97 context_->AddProviderHost(std::move(host)); 116 context_->AddProviderHost(std::move(host));
98 return host_raw; 117 return host_raw;
99 } 118 }
100 119
101 TestBrowserThreadBundle thread_bundle_; 120 TestBrowserThreadBundle thread_bundle_;
102 std::unique_ptr<EmbeddedWorkerTestHelper> helper_; 121 std::unique_ptr<EmbeddedWorkerTestHelper> helper_;
103 ServiceWorkerContextCore* context_; 122 ServiceWorkerContextCore* context_;
104 scoped_refptr<ServiceWorkerRegistration> registration1_; 123 scoped_refptr<ServiceWorkerRegistration> registration1_;
105 scoped_refptr<ServiceWorkerRegistration> registration2_; 124 scoped_refptr<ServiceWorkerRegistration> registration2_;
106 scoped_refptr<ServiceWorkerRegistration> registration3_; 125 scoped_refptr<ServiceWorkerRegistration> registration3_;
107 GURL script_url_; 126 GURL script_url_;
108 ServiceWorkerTestContentClient test_content_client_; 127 ServiceWorkerTestContentClient test_content_client_;
109 TestContentBrowserClient test_content_browser_client_; 128 TestContentBrowserClient test_content_browser_client_;
110 ContentBrowserClient* old_content_browser_client_; 129 ContentBrowserClient* old_content_browser_client_;
111 int next_provider_id_; 130 int next_renderer_provided_id_;
131 int next_browser_provided_id_;
132 std::vector<ServiceWorkerRemoteProviderEndpoint> remote_endpoints_;
112 133
113 private: 134 private:
114 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProviderHostTest); 135 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProviderHostTest);
115 }; 136 };
116 137
117 TEST_F(ServiceWorkerProviderHostTest, PotentialRegistration_ProcessStatus) { 138 TEST_F(ServiceWorkerProviderHostTest, PotentialRegistration_ProcessStatus) {
118 ServiceWorkerProviderHost* provider_host1 = 139 ServiceWorkerProviderHost* provider_host1 =
119 CreateProviderHost(GURL("https://www.example.com/example1.html")); 140 CreateProviderHost(GURL("https://www.example.com/example1.html"));
120 ServiceWorkerProviderHost* provider_host2 = 141 ServiceWorkerProviderHost* provider_host2 =
121 CreateProviderHost(GURL("https://www.example.com/example2.html")); 142 CreateProviderHost(GURL("https://www.example.com/example2.html"));
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 EXPECT_TRUE(OriginCanAccessServiceWorkers(url)); 238 EXPECT_TRUE(OriginCanAccessServiceWorkers(url));
218 provider_host_secure_parent->SetDocumentUrl(url); 239 provider_host_secure_parent->SetDocumentUrl(url);
219 EXPECT_TRUE(provider_host_secure_parent->IsContextSecureForServiceWorker()); 240 EXPECT_TRUE(provider_host_secure_parent->IsContextSecureForServiceWorker());
220 241
221 // Exceptional service worker scheme with insecure parent frame. 242 // Exceptional service worker scheme with insecure parent frame.
222 provider_host_insecure_parent->SetDocumentUrl(url); 243 provider_host_insecure_parent->SetDocumentUrl(url);
223 EXPECT_FALSE( 244 EXPECT_FALSE(
224 provider_host_insecure_parent->IsContextSecureForServiceWorker()); 245 provider_host_insecure_parent->IsContextSecureForServiceWorker());
225 } 246 }
226 247
248 TEST_F(ServiceWorkerProviderHostTest, RemoveProvider) {
249 // Create a provider host connected with the renderer process.
250 ServiceWorkerProviderHost* provider_host =
251 CreateProviderHost(GURL("https://www.example.com/example1.html"));
252 int process_id = provider_host->process_id();
253 int provider_id = provider_host->provider_id();
254 EXPECT_TRUE(context_->GetProviderHost(process_id, provider_id));
255
256 // Disconnect the mojo pipe from the renderer side.
257 ASSERT_TRUE(remote_endpoints_.back().host_ptr()->is_bound());
258 remote_endpoints_.back().host_ptr()->reset();
259 base::RunLoop().RunUntilIdle();
260 EXPECT_FALSE(context_->GetProviderHost(process_id, provider_id));
261 }
262
227 } // namespace content 263 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698