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

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

Issue 7511005: Initial version of web intents registry (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Review fixes. Created 9 years, 4 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/intents/web_intents_registry.h"
6 #include "chrome/browser/webdata/web_data_service.h"
7
8 // Internal object representing all data associated with a single query.
9 struct WebIntentsRegistry::IntentsQuery {
10 // Unique query identifier.
11 QueryID query_id_;
12
13 // Underlying data query.
14 WebDataService::Handle pending_query_;
15
16 // the consumer for this particular query.
17 Consumer* consumer_;
18
19 // TODO(groby): Additional filter data will go here - filtering is handled
20 // per query.
21 };
22
23 WebIntentsRegistry::WebIntentsRegistry() : next_query_id_(0) {}
24
25 WebIntentsRegistry::~WebIntentsRegistry() {
26 // Cancel all pending queries, since we can't handle them any more.
27 for (QueryMap::iterator it(queries.begin()); it != queries.end(); ++it) {
28 wds_->CancelRequest(it->first);
29 delete it->second;
30 }
31 }
32
33 void WebIntentsRegistry::Initialize(scoped_refptr<WebDataService> wds) {
34 wds_ = wds;
35 }
36
37 void WebIntentsRegistry::OnWebDataServiceRequestDone(
38 WebDataService::Handle h,
39 const WDTypedResult* result) {
40 DCHECK(result);
41 DCHECK(result->GetType() == WEB_INTENTS_RESULT);
42
43 QueryMap::iterator it = queries.find(h);
44 DCHECK(it != queries.end());
45
46 IntentsQuery* query(it->second);
47 DCHECK(query);
48 queries.erase(it);
49
50 // TODO(groby): Filtering goes here.
51 std::vector<WebIntentData> intents = static_cast<
52 const WDResult<std::vector<WebIntentData> >*>(result)->GetValue();
53
54 query->consumer_->OnIntentsQueryDone(query->query_id_, intents);
55 }
56
57 WebIntentsRegistry::QueryID WebIntentsRegistry::GetIntentProviders(
58 const string16& action,
59 Consumer* consumer) {
60 DCHECK(consumer);
61 DCHECK(wds_.get());
62
63 IntentsQuery* query = new IntentsQuery;
64 query->query_id_ = next_query_id_++;
65 query->consumer_ = consumer;
66 query->pending_query_ = wds_->GetWebIntents(action, this);
67 queries[query->pending_query_] = query;
68
69 return query->query_id_;
70 }
71
72 void WebIntentsRegistry::RegisterIntentProvider(const WebIntentData& intent) {
73 DCHECK(wds_.get());
74 wds_->AddWebIntent(intent);
75 }
76
77 void WebIntentsRegistry::UnregisterIntentProvider(const WebIntentData& intent) {
78 DCHECK(wds_.get());
79 wds_->RemoveWebIntent(intent);
80 }
OLDNEW
« no previous file with comments | « chrome/browser/intents/web_intents_registry.h ('k') | chrome/browser/intents/web_intents_registry_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698