1 // Copyright (c) 2012 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 CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_MESSAGE_FILTER_H_ 6 #define CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_MESSAGE_FILTER_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "content/browser/dom_storage/dom_storage_context_impl.h" 11 #include "content/common/dom_storage/dom_storage_types.h" 12 #include "content/public/browser/browser_message_filter.h" 13 14 class GURL; 15 16 namespace base { 17 class NullableString16; 18 } 19 20 namespace content { 21 22 class DOMStorageArea; 23 class DOMStorageContextImpl; 24 class DOMStorageContextWrapper; 25 class DOMStorageHost; 26 27 // This class handles the logistics of DOM Storage within the browser process. 28 // It mostly ferries information between IPCs and the dom_storage classes. 29 class DOMStorageMessageFilter 30 : public BrowserMessageFilter, 31 public DOMStorageContextImpl::EventObserver { 32 public: 33 explicit DOMStorageMessageFilter(int unused, 34 DOMStorageContextWrapper* context); 35 36 private: 37 virtual ~DOMStorageMessageFilter(); 38 39 void InitializeInSequence(); 40 void UninitializeInSequence(); 41 42 // BrowserMessageFilter implementation 43 virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE; 44 virtual void OnFilterRemoved() OVERRIDE; 45 virtual base::TaskRunner* OverrideTaskRunnerForMessage( 46 const IPC::Message& message) OVERRIDE; 47 virtual bool OnMessageReceived(const IPC::Message& message, 48 bool* message_was_ok) OVERRIDE; 49 50 // Message Handlers. 51 void OnOpenStorageArea(int connection_id, int64 namespace_id, 52 const GURL& origin); 53 void OnCloseStorageArea(int connection_id); 54 void OnLoadStorageArea(int connection_id, DOMStorageValuesMap* map); 55 void OnSetItem(int connection_id, const string16& key, 56 const string16& value, const GURL& page_url); 57 void OnRemoveItem(int connection_id, const string16& key, 58 const GURL& page_url); 59 void OnClear(int connection_id, const GURL& page_url); 60 void OnFlushMessages(); 61 62 // DOMStorageContextImpl::EventObserver implementation which 63 // sends events back to our renderer process. 64 virtual void OnDOMStorageItemSet( 65 const DOMStorageArea* area, 66 const string16& key, 67 const string16& new_value, 68 const base::NullableString16& old_value, 69 const GURL& page_url) OVERRIDE; 70 virtual void OnDOMStorageItemRemoved( 71 const DOMStorageArea* area, 72 const string16& key, 73 const string16& old_value, 74 const GURL& page_url) OVERRIDE; 75 virtual void OnDOMStorageAreaCleared( 76 const DOMStorageArea* area, 77 const GURL& page_url) OVERRIDE; 78 79 void SendDOMStorageEvent( 80 const DOMStorageArea* area, 81 const GURL& page_url, 82 const base::NullableString16& key, 83 const base::NullableString16& new_value, 84 const base::NullableString16& old_value); 85 86 scoped_refptr<DOMStorageContextImpl> context_; 87 scoped_ptr<DOMStorageHost> host_; 88 int connection_dispatching_message_for_; 89 90 DISALLOW_IMPLICIT_CONSTRUCTORS(DOMStorageMessageFilter); 91 }; 92 93 } // namespace content 94 95 #endif // CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_MESSAGE_FILTER_H_ 96