diff options
-rw-r--r-- | chrome/browser/ui/intents/web_intent_picker_controller.cc | 4 | ||||
-rw-r--r-- | content/browser/intents/intent_injector.cc | 13 | ||||
-rw-r--r-- | content/renderer/intents_dispatcher.cc | 1 | ||||
-rw-r--r-- | webkit/glue/web_intent_reply_data.h | 6 |
4 files changed, 20 insertions, 4 deletions
diff --git a/chrome/browser/ui/intents/web_intent_picker_controller.cc b/chrome/browser/ui/intents/web_intent_picker_controller.cc index bc55a0a..6e7a28c 100644 --- a/chrome/browser/ui/intents/web_intent_picker_controller.cc +++ b/chrome/browser/ui/intents/web_intent_picker_controller.cc @@ -205,7 +205,9 @@ void WebIntentPickerController::OnServiceChosen(size_t index) { } void WebIntentPickerController::OnCancelled() { - // TODO(binji) Tell the renderer that the intent was cancelled. + InvokingTabReplyForwarder forwarder(wrapper_, routing_id_); + forwarder.Send(new IntentsMsg_WebIntentReply( + 0, webkit_glue::WEB_INTENT_PICKER_CANCELLED, string16(), intent_id_)); ClosePicker(); } diff --git a/content/browser/intents/intent_injector.cc b/content/browser/intents/intent_injector.cc index 2295194..a8d74f8 100644 --- a/content/browser/intents/intent_injector.cc +++ b/content/browser/intents/intent_injector.cc @@ -24,6 +24,12 @@ IntentInjector::~IntentInjector() { } void IntentInjector::TabContentsDestroyed(TabContents* tab) { + if (source_tab_.get()) { + source_tab_->Send(new IntentsMsg_WebIntentReply( + 0, webkit_glue::WEB_INTENT_SERVICE_TAB_CLOSED, string16(), intent_id_)); + source_tab_.reset(NULL); + } + delete this; } @@ -87,6 +93,9 @@ void IntentInjector::OnReply(const IPC::Message& message, // TODO(gbillock): We need to observe source_tab_ and make // sure it hasn't been closed or something... - source_tab_->Send(new IntentsMsg_WebIntentReply( - 0, reply_type, data, intent_id)); + if (source_tab_.get()) { + source_tab_->Send(new IntentsMsg_WebIntentReply( + 0, reply_type, data, intent_id)); + source_tab_.reset(NULL); + } } diff --git a/content/renderer/intents_dispatcher.cc b/content/renderer/intents_dispatcher.cc index a2f56d90..1c8abaf 100644 --- a/content/renderer/intents_dispatcher.cc +++ b/content/renderer/intents_dispatcher.cc @@ -149,7 +149,6 @@ void IntentsDispatcher::OnWebIntentReply( LOG(INFO) << "RenderView got reply to intent type " << reply_type; } - void IntentsDispatcher::OnResult(const WebKit::WebString& data) { Send(new IntentsMsg_WebIntentReply( routing_id(), diff --git a/webkit/glue/web_intent_reply_data.h b/webkit/glue/web_intent_reply_data.h index 287dbe9..70a65ff 100644 --- a/webkit/glue/web_intent_reply_data.h +++ b/webkit/glue/web_intent_reply_data.h @@ -17,6 +17,12 @@ enum WebIntentReplyType { // Sent for a failure message. WEB_INTENT_REPLY_FAILURE, + + // Sent if the picker is cancelled without a selection being made. + WEB_INTENT_PICKER_CANCELLED, + + // Sent if the service tab is closed without any response being sent. + WEB_INTENT_SERVICE_TAB_CLOSED, }; } // namespace webkit_glue |