Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(275)

Side by Side Diff: chrome/browser/in_process_webkit/dom_storage_dispatcher_host.h

Issue 5722003: Make DOMStorageDispatcherHost be a message filter (and rename it accordingly)... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: get rid of _DELAY_HANDLE macro Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698