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

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: Addressed comments from falken 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";
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 SetBrowserClientForTesting(old_content_browser_client_); 69 SetBrowserClientForTesting(old_content_browser_client_);
69 // Reset cached security schemes so we don't affect other tests. 70 // Reset cached security schemes so we don't affect other tests.
70 ResetSchemesAndOriginsWhitelist(); 71 ResetSchemesAndOriginsWhitelist();
71 } 72 }
72 73
73 bool PatternHasProcessToRun(const GURL& pattern) const { 74 bool PatternHasProcessToRun(const GURL& pattern) const {
74 return context_->process_manager()->PatternHasProcessToRun(pattern); 75 return context_->process_manager()->PatternHasProcessToRun(pattern);
75 } 76 }
76 77
77 ServiceWorkerProviderHost* CreateProviderHost(const GURL& document_url) { 78 ServiceWorkerProviderHost* CreateProviderHost(const GURL& document_url) {
78 std::unique_ptr<ServiceWorkerProviderHost> host = 79 remote_endpoints_.emplace_back();
79 CreateProviderHostForWindow( 80 std::unique_ptr<ServiceWorkerProviderHost> host;
80 helper_->mock_render_process_id(), next_provider_id_++, 81 if (IsBrowserSideNavigationEnabled()) {
81 true /* is_parent_frame_secure */, helper_->context()->AsWeakPtr()); 82 static int next_browser_provided_id = -2;
falken 2017/05/22 08:28:12 could this be a class member like |next_provider_i
shimazu 2017/05/23 06:29:34 Done.
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 mojom::ServiceWorkerProviderAssociatedPtr client_ptr;
91 remote_endpoints_.back().client_request =
92 mojo::MakeIsolatedRequest(&client_ptr);
93 info.client_ptr_info = client_ptr.PassInterface();
94 info.host_request =
95 mojo::MakeIsolatedRequest(&remote_endpoints_.back().host_ptr);
96 host->CompleteNavigationInitialized(helper_->mock_render_process_id(),
97 std::move(info), nullptr);
98 } else {
99 host = CreateProviderHostForWindow(
100 helper_->mock_render_process_id(), next_provider_id_++,
101 true /* is_parent_frame_secure */, helper_->context()->AsWeakPtr(),
102 &remote_endpoints_.back());
103 }
104
82 ServiceWorkerProviderHost* host_raw = host.get(); 105 ServiceWorkerProviderHost* host_raw = host.get();
83 host->SetDocumentUrl(document_url); 106 host->SetDocumentUrl(document_url);
84 context_->AddProviderHost(std::move(host)); 107 context_->AddProviderHost(std::move(host));
85 return host_raw; 108 return host_raw;
86 } 109 }
87 110
88 ServiceWorkerProviderHost* CreateProviderHostWithInsecureParentFrame( 111 ServiceWorkerProviderHost* CreateProviderHostWithInsecureParentFrame(
89 const GURL& document_url) { 112 const GURL& document_url) {
113 remote_endpoints_.emplace_back();
90 std::unique_ptr<ServiceWorkerProviderHost> host = 114 std::unique_ptr<ServiceWorkerProviderHost> host =
91 CreateProviderHostForWindow(helper_->mock_render_process_id(), 115 CreateProviderHostForWindow(
92 next_provider_id_++, 116 helper_->mock_render_process_id(), next_provider_id_++,
93 false /* is_parent_frame_secure */, 117 false /* is_parent_frame_secure */, helper_->context()->AsWeakPtr(),
94 helper_->context()->AsWeakPtr()); 118 &remote_endpoints_.back());
95 ServiceWorkerProviderHost* host_raw = host.get(); 119 ServiceWorkerProviderHost* host_raw = host.get();
96 host->SetDocumentUrl(document_url); 120 host->SetDocumentUrl(document_url);
97 context_->AddProviderHost(std::move(host)); 121 context_->AddProviderHost(std::move(host));
98 return host_raw; 122 return host_raw;
99 } 123 }
100 124
101 TestBrowserThreadBundle thread_bundle_; 125 TestBrowserThreadBundle thread_bundle_;
102 std::unique_ptr<EmbeddedWorkerTestHelper> helper_; 126 std::unique_ptr<EmbeddedWorkerTestHelper> helper_;
103 ServiceWorkerContextCore* context_; 127 ServiceWorkerContextCore* context_;
104 scoped_refptr<ServiceWorkerRegistration> registration1_; 128 scoped_refptr<ServiceWorkerRegistration> registration1_;
105 scoped_refptr<ServiceWorkerRegistration> registration2_; 129 scoped_refptr<ServiceWorkerRegistration> registration2_;
106 scoped_refptr<ServiceWorkerRegistration> registration3_; 130 scoped_refptr<ServiceWorkerRegistration> registration3_;
107 GURL script_url_; 131 GURL script_url_;
108 ServiceWorkerTestContentClient test_content_client_; 132 ServiceWorkerTestContentClient test_content_client_;
109 TestContentBrowserClient test_content_browser_client_; 133 TestContentBrowserClient test_content_browser_client_;
110 ContentBrowserClient* old_content_browser_client_; 134 ContentBrowserClient* old_content_browser_client_;
111 int next_provider_id_; 135 int next_provider_id_;
136 std::vector<ServiceWorkerRemoteProviderEndpoint> remote_endpoints_;
112 137
113 private: 138 private:
114 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProviderHostTest); 139 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProviderHostTest);
115 }; 140 };
116 141
117 TEST_F(ServiceWorkerProviderHostTest, PotentialRegistration_ProcessStatus) { 142 TEST_F(ServiceWorkerProviderHostTest, PotentialRegistration_ProcessStatus) {
118 ServiceWorkerProviderHost* provider_host1 = 143 ServiceWorkerProviderHost* provider_host1 =
119 CreateProviderHost(GURL("https://www.example.com/example1.html")); 144 CreateProviderHost(GURL("https://www.example.com/example1.html"));
120 ServiceWorkerProviderHost* provider_host2 = 145 ServiceWorkerProviderHost* provider_host2 =
121 CreateProviderHost(GURL("https://www.example.com/example2.html")); 146 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)); 242 EXPECT_TRUE(OriginCanAccessServiceWorkers(url));
218 provider_host_secure_parent->SetDocumentUrl(url); 243 provider_host_secure_parent->SetDocumentUrl(url);
219 EXPECT_TRUE(provider_host_secure_parent->IsContextSecureForServiceWorker()); 244 EXPECT_TRUE(provider_host_secure_parent->IsContextSecureForServiceWorker());
220 245
221 // Exceptional service worker scheme with insecure parent frame. 246 // Exceptional service worker scheme with insecure parent frame.
222 provider_host_insecure_parent->SetDocumentUrl(url); 247 provider_host_insecure_parent->SetDocumentUrl(url);
223 EXPECT_FALSE( 248 EXPECT_FALSE(
224 provider_host_insecure_parent->IsContextSecureForServiceWorker()); 249 provider_host_insecure_parent->IsContextSecureForServiceWorker());
225 } 250 }
226 251
252 TEST_F(ServiceWorkerProviderHostTest, RemoveProvider) {
253 // Create a provider host connected with the renderer process.
254 ServiceWorkerProviderHost* provider_host =
255 CreateProviderHost(GURL("https://www.example.com/example1.html"));
256 int process_id = provider_host->process_id();
257 int provider_id = provider_host->provider_id();
258 EXPECT_TRUE(context_->GetProviderHost(process_id, provider_id));
259
260 // Disconnect the mojo pipe from the renderer side.
261 ASSERT_TRUE(remote_endpoints_.back().host_ptr.is_bound());
262 remote_endpoints_.back().host_ptr.reset();
263 base::RunLoop().RunUntilIdle();
264 EXPECT_FALSE(context_->GetProviderHost(process_id, provider_id));
265 }
266
227 } // namespace content 267 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698