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

Side by Side Diff: chrome/browser/extensions/api/cookies/cookies_api.cc

Issue 252653002: Rename (Chrome)SyncExtensionFunction::RunImpl to RunSync so that the RunImpl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix bookmarks Created 6 years, 7 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // Implements the Chrome Extensions Cookies API. 5 // Implements the Chrome Extensions Cookies API.
6 6
7 #include "chrome/browser/extensions/api/cookies/cookies_api.h" 7 #include "chrome/browser/extensions/api/cookies/cookies_api.h"
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 30 matching lines...) Expand all
41 namespace Get = extensions::api::cookies::Get; 41 namespace Get = extensions::api::cookies::Get;
42 namespace GetAll = extensions::api::cookies::GetAll; 42 namespace GetAll = extensions::api::cookies::GetAll;
43 namespace GetAllCookieStores = extensions::api::cookies::GetAllCookieStores; 43 namespace GetAllCookieStores = extensions::api::cookies::GetAllCookieStores;
44 namespace Remove = extensions::api::cookies::Remove; 44 namespace Remove = extensions::api::cookies::Remove;
45 namespace Set = extensions::api::cookies::Set; 45 namespace Set = extensions::api::cookies::Set;
46 46
47 namespace extensions { 47 namespace extensions {
48 namespace cookies = api::cookies; 48 namespace cookies = api::cookies;
49 namespace keys = cookies_api_constants; 49 namespace keys = cookies_api_constants;
50 50
51 namespace {
52
53 bool ParseUrl(ChromeAsyncExtensionFunction* function,
54 const std::string& url_string,
55 GURL* url,
56 bool check_host_permissions) {
57 *url = GURL(url_string);
58 if (!url->is_valid()) {
59 function->SetError(
60 ErrorUtils::FormatErrorMessage(keys::kInvalidUrlError, url_string));
61 return false;
62 }
63 // Check against host permissions if needed.
64 if (check_host_permissions &&
65 !PermissionsData::HasHostPermission(function->GetExtension(), *url)) {
66 function->SetError(ErrorUtils::FormatErrorMessage(
67 keys::kNoHostPermissionsError, url->spec()));
68 return false;
69 }
70 return true;
71 }
72
73 bool ParseStoreContext(ChromeAsyncExtensionFunction* function,
74 std::string* store_id,
75 net::URLRequestContextGetter** context) {
76 DCHECK((context || store_id->empty()));
77 Profile* store_profile = NULL;
78 if (!store_id->empty()) {
79 store_profile = cookies_helpers::ChooseProfileFromStoreId(
80 *store_id, function->GetProfile(), function->include_incognito());
81 if (!store_profile) {
82 function->SetError(ErrorUtils::FormatErrorMessage(
83 keys::kInvalidStoreIdError, *store_id));
84 return false;
85 }
86 } else {
87 // The store ID was not specified; use the current execution context's
88 // cookie store by default.
89 // GetCurrentBrowser() already takes into account incognito settings.
90 Browser* current_browser = function->GetCurrentBrowser();
91 if (!current_browser) {
92 function->SetError(keys::kNoCookieStoreFoundError);
93 return false;
94 }
95 store_profile = current_browser->profile();
96 *store_id = cookies_helpers::GetStoreIdFromProfile(store_profile);
97 }
98
99 if (context)
100 *context = store_profile->GetRequestContext();
101 DCHECK(context);
102
103 return true;
104 }
105
106 } // namespace
107
51 CookiesEventRouter::CookiesEventRouter(content::BrowserContext* context) 108 CookiesEventRouter::CookiesEventRouter(content::BrowserContext* context)
52 : profile_(Profile::FromBrowserContext(context)) { 109 : profile_(Profile::FromBrowserContext(context)) {
53 CHECK(registrar_.IsEmpty()); 110 CHECK(registrar_.IsEmpty());
54 registrar_.Add(this, 111 registrar_.Add(this,
55 chrome::NOTIFICATION_COOKIE_CHANGED, 112 chrome::NOTIFICATION_COOKIE_CHANGED,
56 content::NotificationService::AllBrowserContextsAndSources()); 113 content::NotificationService::AllBrowserContextsAndSources());
57 } 114 }
58 115
59 CookiesEventRouter::~CookiesEventRouter() { 116 CookiesEventRouter::~CookiesEventRouter() {
60 } 117 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 GURL& cookie_domain) { 192 GURL& cookie_domain) {
136 EventRouter* router = context ? extensions::EventRouter::Get(context) : NULL; 193 EventRouter* router = context ? extensions::EventRouter::Get(context) : NULL;
137 if (!router) 194 if (!router)
138 return; 195 return;
139 scoped_ptr<Event> event(new Event(event_name, event_args.Pass())); 196 scoped_ptr<Event> event(new Event(event_name, event_args.Pass()));
140 event->restrict_to_browser_context = context; 197 event->restrict_to_browser_context = context;
141 event->event_url = cookie_domain; 198 event->event_url = cookie_domain;
142 router->BroadcastEvent(event.Pass()); 199 router->BroadcastEvent(event.Pass());
143 } 200 }
144 201
145 bool CookiesFunction::ParseUrl(const std::string& url_string, GURL* url,
146 bool check_host_permissions) {
147 *url = GURL(url_string);
148 if (!url->is_valid()) {
149 error_ = ErrorUtils::FormatErrorMessage(
150 keys::kInvalidUrlError, url_string);
151 return false;
152 }
153 // Check against host permissions if needed.
154 if (check_host_permissions &&
155 !PermissionsData::HasHostPermission(GetExtension(), *url)) {
156 error_ = ErrorUtils::FormatErrorMessage(
157 keys::kNoHostPermissionsError, url->spec());
158 return false;
159 }
160 return true;
161 }
162
163 bool CookiesFunction::ParseStoreContext(
164 std::string* store_id,
165 net::URLRequestContextGetter** context) {
166 DCHECK((context || store_id->empty()));
167 Profile* store_profile = NULL;
168 if (!store_id->empty()) {
169 store_profile = cookies_helpers::ChooseProfileFromStoreId(
170 *store_id, GetProfile(), include_incognito());
171 if (!store_profile) {
172 error_ = ErrorUtils::FormatErrorMessage(
173 keys::kInvalidStoreIdError, *store_id);
174 return false;
175 }
176 } else {
177 // The store ID was not specified; use the current execution context's
178 // cookie store by default.
179 // GetCurrentBrowser() already takes into account incognito settings.
180 Browser* current_browser = GetCurrentBrowser();
181 if (!current_browser) {
182 error_ = keys::kNoCookieStoreFoundError;
183 return false;
184 }
185 store_profile = current_browser->profile();
186 *store_id = cookies_helpers::GetStoreIdFromProfile(store_profile);
187 }
188
189 if (context)
190 *context = store_profile->GetRequestContext();
191 DCHECK(context);
192
193 return true;
194 }
195
196 CookiesGetFunction::CookiesGetFunction() { 202 CookiesGetFunction::CookiesGetFunction() {
197 } 203 }
198 204
199 CookiesGetFunction::~CookiesGetFunction() { 205 CookiesGetFunction::~CookiesGetFunction() {
200 } 206 }
201 207
202 bool CookiesGetFunction::RunImpl() { 208 bool CookiesGetFunction::RunImpl() {
203 parsed_args_ = Get::Params::Create(*args_); 209 parsed_args_ = Get::Params::Create(*args_);
204 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); 210 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get());
205 211
206 // Read/validate input parameters. 212 // Read/validate input parameters.
207 if (!ParseUrl(parsed_args_->details.url, &url_, true)) 213 if (!ParseUrl(this, parsed_args_->details.url, &url_, true))
208 return false; 214 return false;
209 215
210 std::string store_id = 216 std::string store_id =
211 parsed_args_->details.store_id.get() ? *parsed_args_->details.store_id 217 parsed_args_->details.store_id.get() ? *parsed_args_->details.store_id
212 : std::string(); 218 : std::string();
213 net::URLRequestContextGetter* store_context = NULL; 219 net::URLRequestContextGetter* store_context = NULL;
214 if (!ParseStoreContext(&store_id, &store_context)) 220 if (!ParseStoreContext(this, &store_id, &store_context))
215 return false; 221 return false;
216 store_browser_context_ = store_context; 222 store_browser_context_ = store_context;
217 if (!parsed_args_->details.store_id.get()) 223 if (!parsed_args_->details.store_id.get())
218 parsed_args_->details.store_id.reset(new std::string(store_id)); 224 parsed_args_->details.store_id.reset(new std::string(store_id));
219 225
220 store_browser_context_ = store_context; 226 store_browser_context_ = store_context;
221 227
222 bool rv = BrowserThread::PostTask( 228 bool rv = BrowserThread::PostTask(
223 BrowserThread::IO, FROM_HERE, 229 BrowserThread::IO, FROM_HERE,
224 base::Bind(&CookiesGetFunction::GetCookieOnIOThread, this)); 230 base::Bind(&CookiesGetFunction::GetCookieOnIOThread, this));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 } 276 }
271 277
272 CookiesGetAllFunction::~CookiesGetAllFunction() { 278 CookiesGetAllFunction::~CookiesGetAllFunction() {
273 } 279 }
274 280
275 bool CookiesGetAllFunction::RunImpl() { 281 bool CookiesGetAllFunction::RunImpl() {
276 parsed_args_ = GetAll::Params::Create(*args_); 282 parsed_args_ = GetAll::Params::Create(*args_);
277 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); 283 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get());
278 284
279 if (parsed_args_->details.url.get() && 285 if (parsed_args_->details.url.get() &&
280 !ParseUrl(*parsed_args_->details.url, &url_, false)) { 286 !ParseUrl(this, *parsed_args_->details.url, &url_, false)) {
281 return false; 287 return false;
282 } 288 }
283 289
284 std::string store_id = 290 std::string store_id =
285 parsed_args_->details.store_id.get() ? *parsed_args_->details.store_id 291 parsed_args_->details.store_id.get() ? *parsed_args_->details.store_id
286 : std::string(); 292 : std::string();
287 net::URLRequestContextGetter* store_context = NULL; 293 net::URLRequestContextGetter* store_context = NULL;
288 if (!ParseStoreContext(&store_id, &store_context)) 294 if (!ParseStoreContext(this, &store_id, &store_context))
289 return false; 295 return false;
290 store_browser_context_ = store_context; 296 store_browser_context_ = store_context;
291 if (!parsed_args_->details.store_id.get()) 297 if (!parsed_args_->details.store_id.get())
292 parsed_args_->details.store_id.reset(new std::string(store_id)); 298 parsed_args_->details.store_id.reset(new std::string(store_id));
293 299
294 bool rv = BrowserThread::PostTask( 300 bool rv = BrowserThread::PostTask(
295 BrowserThread::IO, FROM_HERE, 301 BrowserThread::IO, FROM_HERE,
296 base::Bind(&CookiesGetAllFunction::GetAllCookiesOnIOThread, this)); 302 base::Bind(&CookiesGetAllFunction::GetAllCookiesOnIOThread, this));
297 DCHECK(rv); 303 DCHECK(rv);
298 304
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 } 341 }
336 342
337 CookiesSetFunction::~CookiesSetFunction() { 343 CookiesSetFunction::~CookiesSetFunction() {
338 } 344 }
339 345
340 bool CookiesSetFunction::RunImpl() { 346 bool CookiesSetFunction::RunImpl() {
341 parsed_args_ = Set::Params::Create(*args_); 347 parsed_args_ = Set::Params::Create(*args_);
342 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); 348 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get());
343 349
344 // Read/validate input parameters. 350 // Read/validate input parameters.
345 if (!ParseUrl(parsed_args_->details.url, &url_, true)) 351 if (!ParseUrl(this, parsed_args_->details.url, &url_, true))
346 return false; 352 return false;
347 353
348 std::string store_id = 354 std::string store_id =
349 parsed_args_->details.store_id.get() ? *parsed_args_->details.store_id 355 parsed_args_->details.store_id.get() ? *parsed_args_->details.store_id
350 : std::string(); 356 : std::string();
351 net::URLRequestContextGetter* store_context = NULL; 357 net::URLRequestContextGetter* store_context = NULL;
352 if (!ParseStoreContext(&store_id, &store_context)) 358 if (!ParseStoreContext(this, &store_id, &store_context))
353 return false; 359 return false;
354 store_browser_context_ = store_context; 360 store_browser_context_ = store_context;
355 if (!parsed_args_->details.store_id.get()) 361 if (!parsed_args_->details.store_id.get())
356 parsed_args_->details.store_id.reset(new std::string(store_id)); 362 parsed_args_->details.store_id.reset(new std::string(store_id));
357 363
358 bool rv = BrowserThread::PostTask( 364 bool rv = BrowserThread::PostTask(
359 BrowserThread::IO, FROM_HERE, 365 BrowserThread::IO, FROM_HERE,
360 base::Bind(&CookiesSetFunction::SetCookieOnIOThread, this)); 366 base::Bind(&CookiesSetFunction::SetCookieOnIOThread, this));
361 DCHECK(rv); 367 DCHECK(rv);
362 368
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 } 456 }
451 457
452 CookiesRemoveFunction::~CookiesRemoveFunction() { 458 CookiesRemoveFunction::~CookiesRemoveFunction() {
453 } 459 }
454 460
455 bool CookiesRemoveFunction::RunImpl() { 461 bool CookiesRemoveFunction::RunImpl() {
456 parsed_args_ = Remove::Params::Create(*args_); 462 parsed_args_ = Remove::Params::Create(*args_);
457 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); 463 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get());
458 464
459 // Read/validate input parameters. 465 // Read/validate input parameters.
460 if (!ParseUrl(parsed_args_->details.url, &url_, true)) 466 if (!ParseUrl(this, parsed_args_->details.url, &url_, true))
461 return false; 467 return false;
462 468
463 std::string store_id = 469 std::string store_id =
464 parsed_args_->details.store_id.get() ? *parsed_args_->details.store_id 470 parsed_args_->details.store_id.get() ? *parsed_args_->details.store_id
465 : std::string(); 471 : std::string();
466 net::URLRequestContextGetter* store_context = NULL; 472 net::URLRequestContextGetter* store_context = NULL;
467 if (!ParseStoreContext(&store_id, &store_context)) 473 if (!ParseStoreContext(this, &store_id, &store_context))
468 return false; 474 return false;
469 store_browser_context_ = store_context; 475 store_browser_context_ = store_context;
470 if (!parsed_args_->details.store_id.get()) 476 if (!parsed_args_->details.store_id.get())
471 parsed_args_->details.store_id.reset(new std::string(store_id)); 477 parsed_args_->details.store_id.reset(new std::string(store_id));
472 478
473 // Pass the work off to the IO thread. 479 // Pass the work off to the IO thread.
474 bool rv = BrowserThread::PostTask( 480 bool rv = BrowserThread::PostTask(
475 BrowserThread::IO, FROM_HERE, 481 BrowserThread::IO, FROM_HERE,
476 base::Bind(&CookiesRemoveFunction::RemoveCookieOnIOThread, this)); 482 base::Bind(&CookiesRemoveFunction::RemoveCookieOnIOThread, this));
477 DCHECK(rv); 483 DCHECK(rv);
(...skipping 26 matching lines...) Expand all
504 BrowserThread::UI, FROM_HERE, 510 BrowserThread::UI, FROM_HERE,
505 base::Bind(&CookiesRemoveFunction::RespondOnUIThread, this)); 511 base::Bind(&CookiesRemoveFunction::RespondOnUIThread, this));
506 DCHECK(rv); 512 DCHECK(rv);
507 } 513 }
508 514
509 void CookiesRemoveFunction::RespondOnUIThread() { 515 void CookiesRemoveFunction::RespondOnUIThread() {
510 DCHECK_CURRENTLY_ON(BrowserThread::UI); 516 DCHECK_CURRENTLY_ON(BrowserThread::UI);
511 SendResponse(true); 517 SendResponse(true);
512 } 518 }
513 519
514 bool CookiesGetAllCookieStoresFunction::RunImpl() { 520 bool CookiesGetAllCookieStoresFunction::RunSync() {
515 Profile* original_profile = GetProfile(); 521 Profile* original_profile = GetProfile();
516 DCHECK(original_profile); 522 DCHECK(original_profile);
517 scoped_ptr<base::ListValue> original_tab_ids(new base::ListValue()); 523 scoped_ptr<base::ListValue> original_tab_ids(new base::ListValue());
518 Profile* incognito_profile = NULL; 524 Profile* incognito_profile = NULL;
519 scoped_ptr<base::ListValue> incognito_tab_ids; 525 scoped_ptr<base::ListValue> incognito_tab_ids;
520 if (include_incognito() && GetProfile()->HasOffTheRecordProfile()) { 526 if (include_incognito() && GetProfile()->HasOffTheRecordProfile()) {
521 incognito_profile = GetProfile()->GetOffTheRecordProfile(); 527 incognito_profile = GetProfile()->GetOffTheRecordProfile();
522 if (incognito_profile) 528 if (incognito_profile)
523 incognito_tab_ids.reset(new base::ListValue()); 529 incognito_tab_ids.reset(new base::ListValue());
524 } 530 }
(...skipping 21 matching lines...) Expand all
546 if (incognito_tab_ids.get() && incognito_tab_ids->GetSize() > 0 && 552 if (incognito_tab_ids.get() && incognito_tab_ids->GetSize() > 0 &&
547 incognito_profile) { 553 incognito_profile) {
548 cookie_stores.push_back(make_linked_ptr( 554 cookie_stores.push_back(make_linked_ptr(
549 cookies_helpers::CreateCookieStore( 555 cookies_helpers::CreateCookieStore(
550 incognito_profile, incognito_tab_ids.release()).release())); 556 incognito_profile, incognito_tab_ids.release()).release()));
551 } 557 }
552 results_ = GetAllCookieStores::Results::Create(cookie_stores); 558 results_ = GetAllCookieStores::Results::Create(cookie_stores);
553 return true; 559 return true;
554 } 560 }
555 561
556 void CookiesGetAllCookieStoresFunction::Run() {
557 SendResponse(RunImpl());
558 }
559
560 CookiesAPI::CookiesAPI(content::BrowserContext* context) 562 CookiesAPI::CookiesAPI(content::BrowserContext* context)
561 : browser_context_(context) { 563 : browser_context_(context) {
562 EventRouter::Get(browser_context_) 564 EventRouter::Get(browser_context_)
563 ->RegisterObserver(this, cookies::OnChanged::kEventName); 565 ->RegisterObserver(this, cookies::OnChanged::kEventName);
564 } 566 }
565 567
566 CookiesAPI::~CookiesAPI() { 568 CookiesAPI::~CookiesAPI() {
567 } 569 }
568 570
569 void CookiesAPI::Shutdown() { 571 void CookiesAPI::Shutdown() {
570 EventRouter::Get(browser_context_)->UnregisterObserver(this); 572 EventRouter::Get(browser_context_)->UnregisterObserver(this);
571 } 573 }
572 574
573 static base::LazyInstance<BrowserContextKeyedAPIFactory<CookiesAPI> > 575 static base::LazyInstance<BrowserContextKeyedAPIFactory<CookiesAPI> >
574 g_factory = LAZY_INSTANCE_INITIALIZER; 576 g_factory = LAZY_INSTANCE_INITIALIZER;
575 577
576 // static 578 // static
577 BrowserContextKeyedAPIFactory<CookiesAPI>* CookiesAPI::GetFactoryInstance() { 579 BrowserContextKeyedAPIFactory<CookiesAPI>* CookiesAPI::GetFactoryInstance() {
578 return g_factory.Pointer(); 580 return g_factory.Pointer();
579 } 581 }
580 582
581 void CookiesAPI::OnListenerAdded( 583 void CookiesAPI::OnListenerAdded(
582 const extensions::EventListenerInfo& details) { 584 const extensions::EventListenerInfo& details) {
583 cookies_event_router_.reset(new CookiesEventRouter(browser_context_)); 585 cookies_event_router_.reset(new CookiesEventRouter(browser_context_));
584 EventRouter::Get(browser_context_)->UnregisterObserver(this); 586 EventRouter::Get(browser_context_)->UnregisterObserver(this);
585 } 587 }
586 588
587 } // namespace extensions 589 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698