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

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

Issue 1285373002: Ensure that Service Worker clients are always returned in MRU order (1) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: basic patch (no tests) Created 5 years, 4 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_version.h" 5 #include "content/browser/service_worker/service_worker_version.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 void AddNonWindowClient(ServiceWorkerProviderHost* host, 371 void AddNonWindowClient(ServiceWorkerProviderHost* host,
372 const ServiceWorkerClientQueryOptions& options, 372 const ServiceWorkerClientQueryOptions& options,
373 ServiceWorkerClients* clients) { 373 ServiceWorkerClients* clients) {
374 blink::WebServiceWorkerClientType host_client_type = host->client_type(); 374 blink::WebServiceWorkerClientType host_client_type = host->client_type();
375 if (host_client_type == blink::WebServiceWorkerClientTypeWindow) 375 if (host_client_type == blink::WebServiceWorkerClientTypeWindow)
376 return; 376 return;
377 if (options.client_type != blink::WebServiceWorkerClientTypeAll && 377 if (options.client_type != blink::WebServiceWorkerClientTypeAll &&
378 options.client_type != host_client_type) 378 options.client_type != host_client_type)
379 return; 379 return;
380 380
381 ServiceWorkerClientInfo client_info( 381 ServiceWorkerClientInfo client_info(blink::WebPageVisibilityStateHidden,
382 blink::WebPageVisibilityStateHidden, 382 false, // is_focused
383 false, // is_focused 383 host->document_url(),
384 host->document_url(), REQUEST_CONTEXT_FRAME_TYPE_NONE, host_client_type); 384 REQUEST_CONTEXT_FRAME_TYPE_NONE,
385 base::TimeTicks::Now(), host_client_type);
nhiroki 2015/08/13 05:56:31 Non-window clients seem to always overcome window
jeremyarcher 2015/08/14 05:22:05 Fixed.
385 client_info.client_uuid = host->client_uuid(); 386 client_info.client_uuid = host->client_uuid();
386 clients->push_back(client_info); 387 clients->push_back(client_info);
387 } 388 }
388 389
389 bool IsInstalled(ServiceWorkerVersion::Status status) { 390 bool IsInstalled(ServiceWorkerVersion::Status status) {
390 switch (status) { 391 switch (status) {
391 case ServiceWorkerVersion::NEW: 392 case ServiceWorkerVersion::NEW:
392 case ServiceWorkerVersion::INSTALLING: 393 case ServiceWorkerVersion::INSTALLING:
393 case ServiceWorkerVersion::REDUNDANT: 394 case ServiceWorkerVersion::REDUNDANT:
394 return false; 395 return false;
(...skipping 895 matching lines...) Expand 10 before | Expand all | Expand 10 after
1290 1291
1291 void ServiceWorkerVersion::OnGetClientsFinished( 1292 void ServiceWorkerVersion::OnGetClientsFinished(
1292 int request_id, 1293 int request_id,
1293 const ServiceWorkerClients& clients) { 1294 const ServiceWorkerClients& clients) {
1294 DCHECK_CURRENTLY_ON(BrowserThread::IO); 1295 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1295 TRACE_EVENT_ASYNC_END1("ServiceWorker", "ServiceWorkerVersion::OnGetClients", 1296 TRACE_EVENT_ASYNC_END1("ServiceWorker", "ServiceWorkerVersion::OnGetClients",
1296 request_id, "The number of clients", clients.size()); 1297 request_id, "The number of clients", clients.size());
1297 1298
1298 if (running_status() != RUNNING) 1299 if (running_status() != RUNNING)
1299 return; 1300 return;
1301 std::sort(clients);
nhiroki 2015/08/13 05:56:31 Can you add comments about why we sort clients her
jeremyarcher 2015/08/14 05:22:05 Fixed.
1300 embedded_worker_->SendMessage( 1302 embedded_worker_->SendMessage(
1301 ServiceWorkerMsg_DidGetClients(request_id, clients)); 1303 ServiceWorkerMsg_DidGetClients(request_id, clients));
1302 } 1304 }
1303 1305
1304 void ServiceWorkerVersion::OnActivateEventFinished( 1306 void ServiceWorkerVersion::OnActivateEventFinished(
1305 int request_id, 1307 int request_id,
1306 blink::WebServiceWorkerEventResult result) { 1308 blink::WebServiceWorkerEventResult result) {
1307 DCHECK(ACTIVATING == status() || 1309 DCHECK(ACTIVATING == status() ||
1308 REDUNDANT == status()) << status(); 1310 REDUNDANT == status()) << status();
1309 TRACE_EVENT0("ServiceWorker", 1311 TRACE_EVENT0("ServiceWorker",
(...skipping 988 matching lines...) Expand 10 before | Expand all | Expand 10 after
2298 base::string16()); 2300 base::string16());
2299 service_port_dispatcher_.reset(); 2301 service_port_dispatcher_.reset();
2300 } 2302 }
2301 2303
2302 void ServiceWorkerVersion::OnBackgroundSyncDispatcherConnectionError() { 2304 void ServiceWorkerVersion::OnBackgroundSyncDispatcherConnectionError() {
2303 RunIDMapCallbacks(&sync_requests_, SERVICE_WORKER_ERROR_FAILED); 2305 RunIDMapCallbacks(&sync_requests_, SERVICE_WORKER_ERROR_FAILED);
2304 background_sync_dispatcher_.reset(); 2306 background_sync_dispatcher_.reset();
2305 } 2307 }
2306 2308
2307 } // namespace content 2309 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698