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

Side by Side Diff: chrome/browser/intents/web_intents_registry.cc

Issue 8144013: Add a check to the registry before the intent infobar is shown. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add doc Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/intents/web_intents_registry.h" 5 #include "chrome/browser/intents/web_intents_registry.h"
6
7 #include "base/callback.h"
8 #include "base/utf_string_conversions.h"
6 #include "chrome/browser/webdata/web_data_service.h" 9 #include "chrome/browser/webdata/web_data_service.h"
7 10
8 // Internal object representing all data associated with a single query. 11 // Internal object representing all data associated with a single query.
9 struct WebIntentsRegistry::IntentsQuery { 12 struct WebIntentsRegistry::IntentsQuery {
10 // Unique query identifier. 13 // Unique query identifier.
11 QueryID query_id_; 14 QueryID query_id_;
12 15
13 // Underlying data query. 16 // Underlying data query.
14 WebDataService::Handle pending_query_; 17 WebDataService::Handle pending_query_;
15 18
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 104
102 IntentsQuery* query = new IntentsQuery; 105 IntentsQuery* query = new IntentsQuery;
103 query->query_id_ = next_query_id_++; 106 query->query_id_ = next_query_id_++;
104 query->consumer_ = consumer; 107 query->consumer_ = consumer;
105 query->pending_query_ = wds_->GetAllWebIntents(this); 108 query->pending_query_ = wds_->GetAllWebIntents(this);
106 queries_[query->pending_query_] = query; 109 queries_[query->pending_query_] = query;
107 110
108 return query->query_id_; 111 return query->query_id_;
109 } 112 }
110 113
114 // A trampoline for showing the infobar if it is not already registered.
James Hawkins 2011/10/05 22:27:17 Should not be mentioning the infobar in this file.
Greg Billock 2011/10/05 22:45:53 Oops. Copy-paste skew.
115 // Triggered by a return to a query to the WebIntentsRegistry.
116 class ProviderCheckConsumer : public WebIntentsRegistry::Consumer {
James Hawkins 2011/10/05 22:27:17 This makes me think we should cache the registrati
Greg Billock 2011/10/05 22:45:53 Yeah. Could be. Let's put that off for now. (DB or
117 public:
118 ProviderCheckConsumer(const WebIntentServiceData& service,
119 const base::Callback<void(bool)>& callback)
120 : callback_(callback),
121 service_(service) {}
122 virtual ~ProviderCheckConsumer() {}
123
124 // Gets the list of all providers for a particular action. Check them all
125 // to see if |provider_| is already registered.
126 virtual void OnIntentsQueryDone(
127 WebIntentsRegistry::QueryID id,
128 const WebIntentsRegistry::IntentList& list) OVERRIDE {
129 scoped_ptr<ProviderCheckConsumer> self_deleter(this);
130
131 for (WebIntentsRegistry::IntentList::const_iterator i = list.begin();
132 i != list.end(); ++i) {
133 if (*i == service_) {
134 callback_.Run(true);
135 return;
136 }
137 }
138
139 callback_.Run(false);
140 }
141
142 private:
143 base::Callback<void(bool)> callback_;
144 WebIntentServiceData service_;
145 };
146
147 WebIntentsRegistry::QueryID WebIntentsRegistry::IntentProviderExists(
148 const WebIntentServiceData& provider,
149 const base::Callback<void(bool)>& callback) {
150 IntentsQuery* query = new IntentsQuery;
151 query->query_id_ = next_query_id_++;
152 query->consumer_ = new ProviderCheckConsumer(provider, callback);
153 query->pending_query_ = wds_->GetWebIntentsForURL(
154 provider.action, UTF8ToUTF16(provider.service_url.spec()), this);
155 queries_[query->pending_query_] = query;
156
157 return query->query_id_;
158 }
159
111 void WebIntentsRegistry::RegisterIntentProvider( 160 void WebIntentsRegistry::RegisterIntentProvider(
112 const WebIntentServiceData& service) { 161 const WebIntentServiceData& service) {
113 DCHECK(wds_.get()); 162 DCHECK(wds_.get());
114 wds_->AddWebIntent(service); 163 wds_->AddWebIntent(service);
115 } 164 }
116 165
117 void WebIntentsRegistry::UnregisterIntentProvider( 166 void WebIntentsRegistry::UnregisterIntentProvider(
118 const WebIntentServiceData& service) { 167 const WebIntentServiceData& service) {
119 DCHECK(wds_.get()); 168 DCHECK(wds_.get());
120 wds_->RemoveWebIntent(service); 169 wds_->RemoveWebIntent(service);
121 } 170 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698