Index: chrome/renderer/extensions/extension_request_sender.h |
diff --git a/chrome/renderer/extensions/extension_request_sender.h b/chrome/renderer/extensions/extension_request_sender.h |
index 20f7baf6da1b6203ee484e8c9a482a15234b9d53..71aba9cf53c404a285911e0db9268186bbc80abc 100644 |
--- a/chrome/renderer/extensions/extension_request_sender.h |
+++ b/chrome/renderer/extensions/extension_request_sender.h |
@@ -9,7 +9,10 @@ |
#include <string> |
#include <map> |
+#include "base/compiler_specific.h" |
#include "base/memory/linked_ptr.h" |
+#include "base/scoped_observer.h" |
+#include "content/public/renderer/render_process_observer.h" |
#include "v8/include/v8.h" |
class ChromeV8ContextSet; |
@@ -19,43 +22,57 @@ namespace base { |
class ListValue; |
} |
+namespace content { |
+class RenderThread; |
+} |
+ |
struct PendingRequest; |
// Responsible for sending requests for named extension API functions to the |
// extension host and routing the responses back to the caller. |
-class ExtensionRequestSender { |
+class ExtensionRequestSender : content::RenderProcessObserver { |
public: |
explicit ExtensionRequestSender(ExtensionDispatcher* extension_dispatcher, |
ChromeV8ContextSet* context_set); |
- ~ExtensionRequestSender(); |
+ virtual ~ExtensionRequestSender(); |
// Makes a call to the API function |name| that is to be handled by the |
- // extension host. The response to this request will be received in |
- // HandleResponse(). |
- // TODO(koz): Remove |request_id| and generate that internally. |
- void StartRequest(const std::string& name, |
- int request_id, |
- bool has_callback, |
- bool for_io_thread, |
- base::ListValue* value_args); |
- |
- // Handles responses from the extension host to calls made by StartRequest(). |
- void HandleResponse(int request_id, |
- bool success, |
- const base::ListValue& response, |
- const std::string& error); |
- |
+ // extension host. |
+ // Returns the request ID of the request, or -1 if no request was made. |
+ int StartRequest(const std::string& name, |
+ bool has_callback, |
+ bool for_io_thread, |
+ base::ListValue* value_args); |
private: |
- typedef std::map<int, linked_ptr<PendingRequest> > PendingRequestMap; |
+ // content::RenderProcessObserver implementation. |
+ virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE; |
+ |
+ void OnExtensionResponse(int request_id, |
+ bool success, |
+ const base::ListValue& response, |
+ const std::string& error); |
void InsertRequest(int request_id, PendingRequest* pending_request); |
linked_ptr<PendingRequest> RemoveRequest(int request_id); |
+ // Owner (weak reference). |
ExtensionDispatcher* extension_dispatcher_; |
- PendingRequestMap pending_requests_; |
+ |
+ // V8 contexts (weak reference). |
ChromeV8ContextSet* context_set_; |
+ // Scoped observer to RenderProcessHost. |
+ ScopedObserver<content::RenderThread, content::RenderProcessObserver> |
+ scoped_observer_; |
+ |
+ // The next request ID. |
+ int next_request_id_; |
+ |
+ // Pending requests. |
+ typedef std::map<int, linked_ptr<PendingRequest> > PendingRequestMap; |
+ PendingRequestMap pending_requests_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ExtensionRequestSender); |
}; |