| Index: chrome/browser/worker_host/worker_process_host.h
 | 
| ===================================================================
 | 
| --- chrome/browser/worker_host/worker_process_host.h	(revision 69724)
 | 
| +++ chrome/browser/worker_host/worker_process_host.h	(working copy)
 | 
| @@ -9,26 +9,19 @@
 | 
|  #include <list>
 | 
|  
 | 
|  #include "base/basictypes.h"
 | 
| -#include "base/callback.h"
 | 
|  #include "base/file_path.h"
 | 
|  #include "chrome/browser/browser_child_process_host.h"
 | 
|  #include "chrome/browser/net/chrome_url_request_context.h"
 | 
|  #include "chrome/browser/worker_host/worker_document_set.h"
 | 
|  #include "googleurl/src/gurl.h"
 | 
|  
 | 
| -class ChromeURLRequestContext;
 | 
| -class ChromeURLRequestContextGetter;
 | 
| -namespace webkit_database {
 | 
| -class DatabaseTracker;
 | 
| -}  // namespace webkit_database
 | 
| +class URLRequestContextGetter;
 | 
|  
 | 
| -struct ViewHostMsg_CreateWorker_Params;
 | 
| -
 | 
|  // The WorkerProcessHost is the interface that represents the browser side of
 | 
|  // the browser <-> worker communication channel. There will be one
 | 
|  // WorkerProcessHost per worker process.  Currently each worker runs in its own
 | 
|  // process, but that may change.  However, we do assume [by storing a
 | 
| -// ChromeURLRequestContext] that a WorkerProcessHost serves a single Profile.
 | 
| +// URLRequestContext] that a WorkerProcessHost serves a single Profile.
 | 
|  class WorkerProcessHost : public BrowserChildProcessHost {
 | 
|   public:
 | 
|  
 | 
| @@ -44,24 +37,24 @@
 | 
|                     int parent_process_id,
 | 
|                     int parent_appcache_host_id,
 | 
|                     int64 main_resource_appcache_id,
 | 
| -                   ChromeURLRequestContext* request_context);
 | 
| +                   URLRequestContextGetter* request_context);
 | 
|      ~WorkerInstance();
 | 
|  
 | 
|      // Unique identifier for a worker client.
 | 
| -    typedef std::pair<IPC::Message::Sender*, int> SenderInfo;
 | 
| +    typedef std::pair<WorkerMessageFilter*, int> FilterInfo;
 | 
|  
 | 
| -    // APIs to manage the sender list for a given instance.
 | 
| -    void AddSender(IPC::Message::Sender* sender, int sender_route_id);
 | 
| -    void RemoveSender(IPC::Message::Sender* sender, int sender_route_id);
 | 
| -    void RemoveSenders(IPC::Message::Sender* sender);
 | 
| -    bool HasSender(IPC::Message::Sender* sender, int sender_route_id) const;
 | 
| -    bool RendererIsParent(int renderer_id, int render_view_route_id) const;
 | 
| -    int NumSenders() const { return senders_.size(); }
 | 
| -    // Returns the single sender (must only be one).
 | 
| -    SenderInfo GetSender() const;
 | 
| +    // APIs to manage the filter list for a given instance.
 | 
| +    void AddFilter(WorkerMessageFilter* filter, int route_id);
 | 
| +    void RemoveFilter(WorkerMessageFilter* filter, int route_id);
 | 
| +    void RemoveFilters(WorkerMessageFilter* filter);
 | 
| +    bool HasFilter(WorkerMessageFilter* filter, int route_id) const;
 | 
| +    bool RendererIsParent(int render_process_id, int render_view_id) const;
 | 
| +    int NumFilters() const { return filters_.size(); }
 | 
| +    // Returns the single filter (must only be one).
 | 
| +    FilterInfo GetFilter() const;
 | 
|  
 | 
| -    typedef std::list<SenderInfo> SenderList;
 | 
| -    const SenderList& senders() const { return senders_; }
 | 
| +    typedef std::list<FilterInfo> FilterList;
 | 
| +    const FilterList& filters() const { return filters_; }
 | 
|  
 | 
|      // Checks if this WorkerInstance matches the passed url/name params
 | 
|      // (per the comparison algorithm in the WebWorkers spec). This API only
 | 
| @@ -92,12 +85,12 @@
 | 
|      WorkerDocumentSet* worker_document_set() const {
 | 
|        return worker_document_set_;
 | 
|      }
 | 
| -    ChromeURLRequestContext* request_context() const {
 | 
| +    URLRequestContextGetter* request_context() const {
 | 
|        return request_context_;
 | 
|      }
 | 
|  
 | 
|     private:
 | 
| -    // Set of all senders (clients) associated with this worker.
 | 
| +    // Set of all filters (clients) associated with this worker.
 | 
|      GURL url_;
 | 
|      bool shared_;
 | 
|      bool off_the_record_;
 | 
| @@ -107,34 +100,36 @@
 | 
|      int parent_process_id_;
 | 
|      int parent_appcache_host_id_;
 | 
|      int64 main_resource_appcache_id_;
 | 
| -    scoped_refptr<ChromeURLRequestContext> request_context_;
 | 
| -    SenderList senders_;
 | 
| +    scoped_refptr<URLRequestContextGetter> request_context_;
 | 
| +    FilterList filters_;
 | 
|      scoped_refptr<WorkerDocumentSet> worker_document_set_;
 | 
|    };
 | 
|  
 | 
|    WorkerProcessHost(
 | 
|        ResourceDispatcherHost* resource_dispatcher_host,
 | 
| -      ChromeURLRequestContext* request_context);
 | 
| +      URLRequestContextGetter* request_context);
 | 
|    ~WorkerProcessHost();
 | 
|  
 | 
|    // Starts the process.  Returns true iff it succeeded.
 | 
| -  bool Init();
 | 
| +  // |render_process_id| is the renderer process responsible for starting this
 | 
| +  // worker.
 | 
| +  bool Init(int render_process_id);
 | 
|  
 | 
|    // Creates a worker object in the process.
 | 
|    void CreateWorker(const WorkerInstance& instance);
 | 
|  
 | 
|    // Returns true iff the given message from a renderer process was forwarded to
 | 
|    // the worker.
 | 
| -  bool FilterMessage(const IPC::Message& message, IPC::Message::Sender* sender);
 | 
| +  bool FilterMessage(const IPC::Message& message, WorkerMessageFilter* filter);
 | 
|  
 | 
| -  void SenderShutdown(IPC::Message::Sender* sender);
 | 
| +  void FilterShutdown(WorkerMessageFilter* filter);
 | 
|  
 | 
|    // Shuts down any shared workers that are no longer referenced by active
 | 
|    // documents.
 | 
| -  void DocumentDetached(IPC::Message::Sender* sender,
 | 
| +  void DocumentDetached(WorkerMessageFilter* filter,
 | 
|                          unsigned long long document_id);
 | 
|  
 | 
| -  ChromeURLRequestContext* request_context() const {
 | 
| +  URLRequestContextGetter* request_context() const {
 | 
|      return request_context_;
 | 
|    }
 | 
|  
 | 
| @@ -146,61 +141,45 @@
 | 
|    Instances& mutable_instances() { return instances_; }
 | 
|  
 | 
|   private:
 | 
| +  // Called when the process has been launched successfully.
 | 
| +  virtual void OnProcessLaunched();
 | 
| +
 | 
| +  // Creates and adds the message filters.
 | 
| +  void CreateMessageFilters(int render_process_id);
 | 
| +
 | 
|    // IPC::Channel::Listener implementation:
 | 
|    // Called when a message arrives from the worker process.
 | 
|    virtual void OnMessageReceived(const IPC::Message& message);
 | 
|  
 | 
| -  // Creates and adds the message filters.
 | 
| -  void CreateMessageFilters();
 | 
| -
 | 
| -  // Called when the process has been launched successfully.
 | 
| -  virtual void OnProcessLaunched();
 | 
| -
 | 
| -  // Called when the app invokes close() from within worker context.
 | 
|    void OnWorkerContextClosed(int worker_route_id);
 | 
| +  void OnAllowDatabase(int worker_route_id,
 | 
| +                       const GURL& url,
 | 
| +                       const string16& name,
 | 
| +                       const string16& display_name,
 | 
| +                       unsigned long estimated_size,
 | 
| +                       bool* result);
 | 
|  
 | 
| -  // Called if a worker tries to connect to a shared worker.
 | 
| -  void OnLookupSharedWorker(const ViewHostMsg_CreateWorker_Params& params,
 | 
| -                            bool* exists,
 | 
| -                            int* route_id,
 | 
| -                            bool* url_error);
 | 
| -
 | 
| -  // Given a Sender, returns the callback that generates a new routing id.
 | 
| -  static CallbackWithReturnValue<int>::Type* GetNextRouteIdCallback(
 | 
| -      IPC::Message::Sender* sender);
 | 
| -
 | 
|    // Relays a message to the given endpoint.  Takes care of parsing the message
 | 
|    // if it contains a message port and sending it a valid route id.
 | 
|    static void RelayMessage(const IPC::Message& message,
 | 
| -                           IPC::Message::Sender* sender,
 | 
| -                           int route_id,
 | 
| -                           CallbackWithReturnValue<int>::Type* next_route_id);
 | 
| +                           WorkerMessageFilter* filter,
 | 
| +                           int route_id);
 | 
|  
 | 
|    virtual bool CanShutdown();
 | 
|  
 | 
|    // Updates the title shown in the task manager.
 | 
|    void UpdateTitle();
 | 
|  
 | 
| -  void OnCreateWorker(const ViewHostMsg_CreateWorker_Params& params,
 | 
| -                      int* route_id);
 | 
| -  void OnCancelCreateDedicatedWorker(int route_id);
 | 
| -  void OnForwardToWorker(const IPC::Message& message);
 | 
| +  ChromeURLRequestContext* GetChromeURLRequestContext();
 | 
|  
 | 
| -  // Checks the content settings whether access to web databases is enabled and
 | 
| -  // relays the WebDatabaseAccessed message to all documents attached to a
 | 
| -  // worker.
 | 
| -  void OnAllowDatabase(const GURL& url,
 | 
| -                       const string16& name,
 | 
| -                       const string16& display_name,
 | 
| -                       unsigned long estimated_size,
 | 
| -                       IPC::Message* reply_msg);
 | 
| -
 | 
|    Instances instances_;
 | 
|  
 | 
| -  scoped_refptr<ChromeURLRequestContext> request_context_;
 | 
| +  scoped_refptr<URLRequestContextGetter> request_context_;
 | 
|  
 | 
| -  // A callback to create a routing id for the associated worker process.
 | 
| -  scoped_ptr<CallbackWithReturnValue<int>::Type> next_route_id_callback_;
 | 
| +  // A reference to the filter associated with this worker process.  We need to
 | 
| +  // keep this around since we'll use it when forward messages to the worker
 | 
| +  // process.
 | 
| +  scoped_refptr<WorkerMessageFilter> worker_message_filter_;
 | 
|  
 | 
|    DISALLOW_COPY_AND_ASSIGN(WorkerProcessHost);
 | 
|  };
 | 
| 
 |