Index: extensions/renderer/guest_view/extensions_guest_view_container.h |
diff --git a/extensions/renderer/guest_view/extensions_guest_view_container.h b/extensions/renderer/guest_view/extensions_guest_view_container.h |
index 9b1424d54da033ffecb31b49c00b45b3d0465240..0efec2668aa17792f6937dc643fa63d44a807089 100644 |
--- a/extensions/renderer/guest_view/extensions_guest_view_container.h |
+++ b/extensions/renderer/guest_view/extensions_guest_view_container.h |
@@ -17,48 +17,58 @@ namespace extensions { |
class ExtensionsGuestViewContainer : public GuestViewContainer { |
public: |
+ |
+ class Request { |
+ public: |
+ Request(GuestViewContainer* container, |
+ v8::Handle<v8::Function> callback, |
+ v8::Isolate* isolate); |
+ virtual ~Request(); |
+ |
+ virtual void PerformRequest() = 0; |
+ virtual void HandleResponse(const IPC::Message& message) = 0; |
+ |
+ GuestViewContainer* container() const { return container_; } |
+ |
+ bool HasCallback() const; |
+ |
+ v8::Handle<v8::Function> GetCallback() const; |
+ |
+ v8::Isolate* isolate() const { return isolate_; } |
+ |
+ private: |
+ GuestViewContainer* container_; |
+ ScopedPersistent<v8::Function> callback_; |
+ v8::Isolate* const isolate_; |
+ }; |
+ |
// This class represents an AttachGuest request from Javascript. It includes |
// the input parameters and the callback function. The Attach operation may |
// not execute immediately, if the container is not ready or if there are |
// other attach operations in flight. |
- class AttachRequest { |
+ class AttachRequest : public Request { |
public: |
- AttachRequest(int element_instance_id, |
+ AttachRequest(GuestViewContainer* container, |
int guest_instance_id, |
scoped_ptr<base::DictionaryValue> params, |
v8::Handle<v8::Function> callback, |
v8::Isolate* isolate); |
- ~AttachRequest(); |
- |
- int element_instance_id() const { return element_instance_id_; } |
+ ~AttachRequest() override; |
- int guest_instance_id() const { return guest_instance_id_; } |
- |
- base::DictionaryValue* attach_params() const { |
- return params_.get(); |
- } |
- |
- bool HasCallback() const; |
- |
- v8::Handle<v8::Function> GetCallback() const; |
- |
- v8::Isolate* isolate() const { return isolate_; } |
+ void PerformRequest() override; |
+ void HandleResponse(const IPC::Message& message) override; |
private: |
- const int element_instance_id_; |
const int guest_instance_id_; |
scoped_ptr<base::DictionaryValue> params_; |
- ScopedPersistent<v8::Function> callback_; |
- v8::Isolate* const isolate_; |
}; |
explicit ExtensionsGuestViewContainer(content::RenderFrame* render_frame); |
~ExtensionsGuestViewContainer() override; |
- static ExtensionsGuestViewContainer* FromID(int render_view_routing_id, |
- int element_instance_id); |
+ static ExtensionsGuestViewContainer* FromID(int element_instance_id); |
- void AttachGuest(linked_ptr<AttachRequest> request); |
+ void IssueRequest(linked_ptr<Request> request); |
// BrowserPluginDelegate implementation. |
void SetElementInstanceID(int element_instance_id) override; |
@@ -69,18 +79,16 @@ class ExtensionsGuestViewContainer : public GuestViewContainer { |
bool OnMessage(const IPC::Message& message) override; |
private: |
- void OnGuestAttached(int element_instance_id, |
- int guest_proxy_routing_id); |
+ void OnHandleCallback(const IPC::Message& message); |
- void AttachGuestInternal(linked_ptr<AttachRequest> request); |
- void EnqueueAttachRequest(linked_ptr<AttachRequest> request); |
- void PerformPendingAttachRequest(); |
- void HandlePendingResponseCallback(int guest_proxy_routing_id); |
+ void EnqueueRequest(linked_ptr<Request> request); |
+ void PerformPendingRequest(); |
+ void HandlePendingResponseCallback(const IPC::Message& message); |
bool ready_; |
- std::deque<linked_ptr<AttachRequest> > pending_requests_; |
- linked_ptr<AttachRequest> pending_response_; |
+ std::deque<linked_ptr<Request> > pending_requests_; |
+ linked_ptr<Request> pending_response_; |
DISALLOW_COPY_AND_ASSIGN(ExtensionsGuestViewContainer); |
}; |