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