15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTROLLEE_REQUEST_HANDLER_H_ 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTROLLEE_REQUEST_HANDLER_H_ 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/gtest_prod_util.h" 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/browser/service_worker/service_worker_request_handler.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace net { 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass NetworkDelegate; 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass URLRequest; 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace content { 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class ResourceRequestBody; 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass ServiceWorkerRegistration; 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass ServiceWorkerURLRequestJob; 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ServiceWorkerVersion; 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// A request handler derivative used to handle requests from 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// controlled documents. 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass CONTENT_EXPORT ServiceWorkerControlleeRequestHandler 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : public ServiceWorkerRequestHandler { 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public: 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ServiceWorkerControlleeRequestHandler( 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::WeakPtr<ServiceWorkerContextCore> context, 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::WeakPtr<ServiceWorkerProviderHost> provider_host, 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::WeakPtr<storage::BlobStorageContext> blob_storage_context, 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ResourceType resource_type, 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_refptr<ResourceRequestBody> body); 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~ServiceWorkerControlleeRequestHandler(); 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Called via custom URLRequestJobFactory. 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual net::URLRequestJob* MaybeCreateJob( 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu net::URLRequest* request, 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu net::NetworkDelegate* network_delegate) OVERRIDE; 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void GetExtraResponseInfo( 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool* was_fetched_via_service_worker, 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL* original_url_via_service_worker, 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeTicks* fetch_start_time, 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeTicks* fetch_ready_time, 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeTicks* fetch_end_time) const OVERRIDE; 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(ServiceWorkerControlleeRequestHandlerTest, 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ActivateWaitingVersion); 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu typedef ServiceWorkerControlleeRequestHandler self; 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // For main resource case. 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void PrepareForMainResource(const GURL& url); 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void DidLookupRegistrationForMainResource( 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ServiceWorkerStatusCode status, 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const scoped_refptr<ServiceWorkerRegistration>& registration); 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void OnVersionStatusChanged( 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ServiceWorkerRegistration* registration, 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ServiceWorkerVersion* version); 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // For sub resource case. 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void PrepareForSubResource(); 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool is_main_resource_load_; 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_refptr<ServiceWorkerURLRequestJob> job_; 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_refptr<ResourceRequestBody> body_; 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::WeakPtrFactory<ServiceWorkerControlleeRequestHandler> weak_factory_; 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(ServiceWorkerControlleeRequestHandler); 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace content 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTROLLEE_REQUEST_HANDLER_H_ 76