| OLD | NEW | 
 | (Empty) | 
|    1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |  | 
|    2 // Use of this source code is governed by a BSD-style license that can be |  | 
|    3 // found in the LICENSE file. |  | 
|    4  |  | 
|    5 #ifndef CHROME_BROWSER_IN_PROCESS_WEBKIT_DOM_STORAGE_DISPATCHER_HOST_H_ |  | 
|    6 #define CHROME_BROWSER_IN_PROCESS_WEBKIT_DOM_STORAGE_DISPATCHER_HOST_H_ |  | 
|    7 #pragma once |  | 
|    8  |  | 
|    9 #include "base/process.h" |  | 
|   10 #include "base/ref_counted.h" |  | 
|   11 #include "base/tracked.h" |  | 
|   12 #include "chrome/browser/in_process_webkit/dom_storage_area.h" |  | 
|   13 #include "chrome/browser/in_process_webkit/webkit_context.h" |  | 
|   14 #include "chrome/common/dom_storage_common.h" |  | 
|   15 #include "ipc/ipc_message.h" |  | 
|   16  |  | 
|   17 class DOMStorageContext; |  | 
|   18 class GURL; |  | 
|   19 class HostContentSettingsMap; |  | 
|   20 class ResourceMessageFilter; |  | 
|   21 class Task; |  | 
|   22 struct ViewMsg_DOMStorageEvent_Params; |  | 
|   23  |  | 
|   24 // This class handles the logistics of DOM Storage within the browser process. |  | 
|   25 // It mostly ferries information between IPCs and the WebKit implementations, |  | 
|   26 // but it also handles some special cases like when renderer processes die. |  | 
|   27 class DOMStorageDispatcherHost |  | 
|   28     : public base::RefCountedThreadSafe<DOMStorageDispatcherHost> { |  | 
|   29  public: |  | 
|   30   // Only call the constructor from the UI thread. |  | 
|   31   DOMStorageDispatcherHost( |  | 
|   32       ResourceMessageFilter* resource_message_filter, |  | 
|   33       WebKitContext* webkit_context); |  | 
|   34  |  | 
|   35   // Only call from ResourceMessageFilter on the IO thread. |  | 
|   36   void Init(int process_id, base::ProcessHandle process_handle); |  | 
|   37  |  | 
|   38   // Only call from ResourceMessageFilter on the IO thread.  Calls self on the |  | 
|   39   // WebKit thread in some cases. |  | 
|   40   void Shutdown(); |  | 
|   41  |  | 
|   42   // Only call from ResourceMessageFilter on the IO thread. |  | 
|   43   bool OnMessageReceived(const IPC::Message& message, bool* msg_is_ok); |  | 
|   44  |  | 
|   45   // Clones a session storage namespace and returns the cloned namespaces' id. |  | 
|   46   // Only call on the IO thread. |  | 
|   47   int64 CloneSessionStorage(int64 original_id); |  | 
|   48  |  | 
|   49   // Send a message to the renderer process associated with our |  | 
|   50   // message_sender_ via the IO thread.  May be called from any thread. |  | 
|   51   void Send(IPC::Message* message); |  | 
|   52  |  | 
|   53   // Only call on the WebKit thread. |  | 
|   54   static void DispatchStorageEvent(const NullableString16& key, |  | 
|   55       const NullableString16& old_value, const NullableString16& new_value, |  | 
|   56       const string16& origin, const GURL& url, bool is_local_storage); |  | 
|   57  |  | 
|   58  private: |  | 
|   59   friend class base::RefCountedThreadSafe<DOMStorageDispatcherHost>; |  | 
|   60   ~DOMStorageDispatcherHost(); |  | 
|   61  |  | 
|   62   // Message Handlers. |  | 
|   63   void OnStorageAreaId(int64 namespace_id, const string16& origin, |  | 
|   64                        IPC::Message* reply_msg); |  | 
|   65   void OnLength(int64 storage_area_id, IPC::Message* reply_msg); |  | 
|   66   void OnKey(int64 storage_area_id, unsigned index, IPC::Message* reply_msg); |  | 
|   67   void OnGetItem(int64 storage_area_id, const string16& key, |  | 
|   68                  IPC::Message* reply_msg); |  | 
|   69   void OnSetItem(int64 storage_area_id, const string16& key, |  | 
|   70                  const string16& value, const GURL& url, |  | 
|   71                  IPC::Message* reply_msg); |  | 
|   72   void OnRemoveItem(int64 storage_area_id, const string16& key, |  | 
|   73                     const GURL& url, IPC::Message* reply_msg); |  | 
|   74   void OnClear(int64 storage_area_id, const GURL& url, IPC::Message* reply_msg); |  | 
|   75  |  | 
|   76   // WebKit thread half of OnStorageAreaId |  | 
|   77   void OnStorageAreaIdWebKit( |  | 
|   78       int64 namespace_id, const string16& origin, IPC::Message* reply_msg, |  | 
|   79       HostContentSettingsMap* host_context_settings_map); |  | 
|   80  |  | 
|   81   // Only call on the IO thread. |  | 
|   82   void OnStorageEvent(const ViewMsg_DOMStorageEvent_Params& params); |  | 
|   83  |  | 
|   84   // A shortcut for accessing our context. |  | 
|   85   DOMStorageContext* Context() { |  | 
|   86     return webkit_context_->dom_storage_context(); |  | 
|   87   } |  | 
|   88  |  | 
|   89   // Use whenever there's a chance OnStorageEvent will be called. |  | 
|   90   class ScopedStorageEventContext { |  | 
|   91    public: |  | 
|   92     ScopedStorageEventContext(DOMStorageDispatcherHost* dispatcher_host, |  | 
|   93                               const GURL* url); |  | 
|   94     ~ScopedStorageEventContext(); |  | 
|   95   }; |  | 
|   96  |  | 
|   97   // Only access on the WebKit thread!  Used for storage events. |  | 
|   98   static DOMStorageDispatcherHost* storage_event_host_; |  | 
|   99   static const GURL* storage_event_url_; |  | 
|  100  |  | 
|  101   // Data shared between renderer processes with the same profile. |  | 
|  102   scoped_refptr<WebKitContext> webkit_context_; |  | 
|  103  |  | 
|  104   // Only set and use on the IO thread. |  | 
|  105   ResourceMessageFilter* resource_message_filter_; |  | 
|  106  |  | 
|  107   // If we get a corrupt message from a renderer, we need to kill it using this |  | 
|  108   // handle. |  | 
|  109   base::ProcessHandle process_handle_; |  | 
|  110  |  | 
|  111   // Used to dispatch messages to the correct view host. |  | 
|  112   int process_id_; |  | 
|  113  |  | 
|  114   DISALLOW_IMPLICIT_CONSTRUCTORS(DOMStorageDispatcherHost); |  | 
|  115 }; |  | 
|  116  |  | 
|  117 #endif  // CHROME_BROWSER_IN_PROCESS_WEBKIT_DOM_STORAGE_DISPATCHER_HOST_H_ |  | 
| OLD | NEW |