15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_MESSAGE_FILTER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_MESSAGE_FILTER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 10bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "content/browser/dom_storage/dom_storage_context_impl.h" 11bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "content/common/dom_storage/dom_storage_types.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_message_filter.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace base { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NullableString16; 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 21bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 22bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass DOMStorageArea; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DOMStorageContextImpl; 24bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass DOMStorageContextWrapper; 25bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass DOMStorageHost; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class handles the logistics of DOM Storage within the browser process. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It mostly ferries information between IPCs and the dom_storage classes. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DOMStorageMessageFilter 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public BrowserMessageFilter, 31bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch public DOMStorageContextImpl::EventObserver { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) explicit DOMStorageMessageFilter(int render_process_id, 34bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch DOMStorageContextWrapper* context); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DOMStorageMessageFilter(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitializeInSequence(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UninitializeInSequence(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowserMessageFilter implementation 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void OnFilterAdded(IPC::Sender* sender) OVERRIDE; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnFilterRemoved() OVERRIDE; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual base::TaskRunner* OverrideTaskRunnerForMessage( 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message& message) OVERRIDE; 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message Handlers. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnOpenStorageArea(int connection_id, int64 namespace_id, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& origin); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCloseStorageArea(int connection_id); 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void OnLoadStorageArea(int connection_id, DOMStorageValuesMap* map, 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool* send_log_get_messages); 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnSetItem(int connection_id, const base::string16& key, 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& value, const GURL& page_url); 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnLogGetItem(int connection_id, const base::string16& key, 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const base::NullableString16& value); 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnRemoveItem(int connection_id, const base::string16& key, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& page_url); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnClear(int connection_id, const GURL& page_url); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnFlushMessages(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 64bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // DOMStorageContextImpl::EventObserver implementation which 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sends events back to our renderer process. 66bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch virtual void OnDOMStorageItemSet( 67bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const DOMStorageArea* area, 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& key, 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& new_value, 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::NullableString16& old_value, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& page_url) OVERRIDE; 72bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch virtual void OnDOMStorageItemRemoved( 73bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const DOMStorageArea* area, 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& key, 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& old_value, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& page_url) OVERRIDE; 77bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch virtual void OnDOMStorageAreaCleared( 78bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const DOMStorageArea* area, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& page_url) OVERRIDE; 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnDOMSessionStorageReset(int64 namespace_id) OVERRIDE; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch void SendDOMStorageEvent( 83bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const DOMStorageArea* area, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& page_url, 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::NullableString16& key, 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::NullableString16& new_value, 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::NullableString16& old_value); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int render_process_id_; 90bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch scoped_refptr<DOMStorageContextImpl> context_; 91bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch scoped_ptr<DOMStorageHost> host_; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int connection_dispatching_message_for_; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_IMPLICIT_CONSTRUCTORS(DOMStorageMessageFilter); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_MESSAGE_FILTER_H_ 100