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

Unified Diff: chrome/browser/ui/intents/web_intent_picker_controller.cc

Issue 11071005: Add native file picker impl using SelectFileDialog. (Closed) Base URL: http://git.chromium.org/chromium/src.git@filePicker
Patch Set: Add functioning browser tests. Created 8 years, 2 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/intents/web_intent_picker_controller.cc
diff --git a/chrome/browser/ui/intents/web_intent_picker_controller.cc b/chrome/browser/ui/intents/web_intent_picker_controller.cc
index 1e753cadc23babde67b4b7c46e228b8c5429d844..93c7fe8b5902903fd53fd91b047cbe6a1d5e54be 100644
--- a/chrome/browser/ui/intents/web_intent_picker_controller.cc
+++ b/chrome/browser/ui/intents/web_intent_picker_controller.cc
@@ -135,6 +135,48 @@ class SourceWindowObserver : content::WebContentsObserver {
base::WeakPtr<WebIntentPickerController> controller_;
};
+// A WebIntentsDispatcher wrapper that deletes a itself,
+// and a service once a response is received.
Greg Billock 2012/10/10 17:12:51 I think we can just do this with a closure using R
Steve McKay 2012/10/10 23:12:57 Done.
+class DeletingDispatcherWrapper : public content::WebIntentsDispatcher {
+ public:
+ explicit DeletingDispatcherWrapper(
+ web_intents::IntentServiceHost* service,
+ content::WebIntentsDispatcher* delegate)
+ : service_(service),
+ delegate_(delegate) {}
+
+ virtual const webkit_glue::WebIntentData& GetIntent() OVERRIDE {
+ return delegate_->GetIntent();
+ }
+
+ virtual void DispatchIntent(content::WebContents* web_contents) OVERRIDE {
+ NOTREACHED();
+ }
+ virtual void ResetDispatch() OVERRIDE {
+ NOTREACHED();
+ }
+
+ virtual void SendReplyMessage(
+ webkit_glue::WebIntentReplyType reply_type,
+ const string16& data) OVERRIDE {
+ delegate_->SendReplyMessage(reply_type, data);
+ }
+
+ virtual void RegisterReplyNotification(
+ const base::Callback<void(webkit_glue::WebIntentReplyType)>&) OVERRIDE {
+ NOTREACHED();
+ }
+
+ private:
+ ~DeletingDispatcherWrapper() {
+ delete service_;
+ delete this;
+ }
+
+ web_intents::IntentServiceHost* service_;
+ content::WebIntentsDispatcher* delegate_;
+};
+
} // namespace
// UMAReporter handles reporting Web Intents events to UMA.
@@ -362,9 +404,10 @@ void WebIntentPickerController::OnServiceChosen(
case webkit_glue::WebIntentServiceData::DISPOSITION_NATIVE: {
web_intents::IntentServiceHost* service =
native_services_->CreateServiceInstance(
- url, intents_dispatcher_->GetIntent());
+ url, intents_dispatcher_->GetIntent(), web_contents_);
DCHECK(service);
- service->HandleIntent(intents_dispatcher_);
+ service->HandleIntent(
+ new DeletingDispatcherWrapper(service, intents_dispatcher_));
break;
}

Powered by Google App Engine
This is Rietveld 408576698