| OLD | NEW |
| 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 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 *store_id = cookies_helpers::GetStoreIdFromProfile(store_profile); | 182 *store_id = cookies_helpers::GetStoreIdFromProfile(store_profile); |
| 183 } | 183 } |
| 184 | 184 |
| 185 if (context) | 185 if (context) |
| 186 *context = store_profile->GetRequestContext(); | 186 *context = store_profile->GetRequestContext(); |
| 187 DCHECK(context); | 187 DCHECK(context); |
| 188 | 188 |
| 189 return true; | 189 return true; |
| 190 } | 190 } |
| 191 | 191 |
| 192 GetCookieFunction::GetCookieFunction() { | 192 CookiesGetFunction::CookiesGetFunction() { |
| 193 } | 193 } |
| 194 | 194 |
| 195 GetCookieFunction::~GetCookieFunction() { | 195 CookiesGetFunction::~CookiesGetFunction() { |
| 196 } | 196 } |
| 197 | 197 |
| 198 bool GetCookieFunction::RunImpl() { | 198 bool CookiesGetFunction::RunImpl() { |
| 199 parsed_args_ = Get::Params::Create(*args_); | 199 parsed_args_ = Get::Params::Create(*args_); |
| 200 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); | 200 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); |
| 201 | 201 |
| 202 // Read/validate input parameters. | 202 // Read/validate input parameters. |
| 203 if (!ParseUrl(parsed_args_->details.url, &url_, true)) | 203 if (!ParseUrl(parsed_args_->details.url, &url_, true)) |
| 204 return false; | 204 return false; |
| 205 | 205 |
| 206 std::string store_id = parsed_args_->details.store_id.get() ? | 206 std::string store_id = parsed_args_->details.store_id.get() ? |
| 207 *parsed_args_->details.store_id : ""; | 207 *parsed_args_->details.store_id : ""; |
| 208 net::URLRequestContextGetter* store_context = NULL; | 208 net::URLRequestContextGetter* store_context = NULL; |
| 209 if (!ParseStoreContext(&store_id, &store_context)) | 209 if (!ParseStoreContext(&store_id, &store_context)) |
| 210 return false; | 210 return false; |
| 211 store_context_ = store_context; | 211 store_context_ = store_context; |
| 212 if (!parsed_args_->details.store_id.get()) | 212 if (!parsed_args_->details.store_id.get()) |
| 213 parsed_args_->details.store_id.reset(new std::string(store_id)); | 213 parsed_args_->details.store_id.reset(new std::string(store_id)); |
| 214 | 214 |
| 215 store_context_ = store_context; | 215 store_context_ = store_context; |
| 216 | 216 |
| 217 bool rv = BrowserThread::PostTask( | 217 bool rv = BrowserThread::PostTask( |
| 218 BrowserThread::IO, FROM_HERE, | 218 BrowserThread::IO, FROM_HERE, |
| 219 base::Bind(&GetCookieFunction::GetCookieOnIOThread, this)); | 219 base::Bind(&CookiesGetFunction::GetCookieOnIOThread, this)); |
| 220 DCHECK(rv); | 220 DCHECK(rv); |
| 221 | 221 |
| 222 // Will finish asynchronously. | 222 // Will finish asynchronously. |
| 223 return true; | 223 return true; |
| 224 } | 224 } |
| 225 | 225 |
| 226 void GetCookieFunction::GetCookieOnIOThread() { | 226 void CookiesGetFunction::GetCookieOnIOThread() { |
| 227 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 227 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 228 net::CookieStore* cookie_store = | 228 net::CookieStore* cookie_store = |
| 229 store_context_->GetURLRequestContext()->cookie_store(); | 229 store_context_->GetURLRequestContext()->cookie_store(); |
| 230 cookies_helpers::GetCookieListFromStore( | 230 cookies_helpers::GetCookieListFromStore( |
| 231 cookie_store, url_, | 231 cookie_store, url_, |
| 232 base::Bind(&GetCookieFunction::GetCookieCallback, this)); | 232 base::Bind(&CookiesGetFunction::GetCookieCallback, this)); |
| 233 } | 233 } |
| 234 | 234 |
| 235 void GetCookieFunction::GetCookieCallback(const net::CookieList& cookie_list) { | 235 void CookiesGetFunction::GetCookieCallback(const net::CookieList& cookie_list) { |
| 236 net::CookieList::const_iterator it; | 236 net::CookieList::const_iterator it; |
| 237 for (it = cookie_list.begin(); it != cookie_list.end(); ++it) { | 237 for (it = cookie_list.begin(); it != cookie_list.end(); ++it) { |
| 238 // Return the first matching cookie. Relies on the fact that the | 238 // Return the first matching cookie. Relies on the fact that the |
| 239 // CookieMonster returns them in canonical order (longest path, then | 239 // CookieMonster returns them in canonical order (longest path, then |
| 240 // earliest creation time). | 240 // earliest creation time). |
| 241 if (it->Name() == parsed_args_->details.name) { | 241 if (it->Name() == parsed_args_->details.name) { |
| 242 scoped_ptr<Cookie> cookie( | 242 scoped_ptr<Cookie> cookie( |
| 243 cookies_helpers::CreateCookie(*it, *parsed_args_->details.store_id)); | 243 cookies_helpers::CreateCookie(*it, *parsed_args_->details.store_id)); |
| 244 results_ = Get::Results::Create(*cookie); | 244 results_ = Get::Results::Create(*cookie); |
| 245 break; | 245 break; |
| 246 } | 246 } |
| 247 } | 247 } |
| 248 | 248 |
| 249 // The cookie doesn't exist; return null. | 249 // The cookie doesn't exist; return null. |
| 250 if (it == cookie_list.end()) | 250 if (it == cookie_list.end()) |
| 251 SetResult(Value::CreateNullValue()); | 251 SetResult(Value::CreateNullValue()); |
| 252 | 252 |
| 253 bool rv = BrowserThread::PostTask( | 253 bool rv = BrowserThread::PostTask( |
| 254 BrowserThread::UI, FROM_HERE, | 254 BrowserThread::UI, FROM_HERE, |
| 255 base::Bind(&GetCookieFunction::RespondOnUIThread, this)); | 255 base::Bind(&CookiesGetFunction::RespondOnUIThread, this)); |
| 256 DCHECK(rv); | 256 DCHECK(rv); |
| 257 } | 257 } |
| 258 | 258 |
| 259 void GetCookieFunction::RespondOnUIThread() { | 259 void CookiesGetFunction::RespondOnUIThread() { |
| 260 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 260 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 261 SendResponse(true); | 261 SendResponse(true); |
| 262 } | 262 } |
| 263 | 263 |
| 264 GetAllCookiesFunction::GetAllCookiesFunction() { | 264 CookiesGetAllFunction::CookiesGetAllFunction() { |
| 265 } | 265 } |
| 266 | 266 |
| 267 GetAllCookiesFunction::~GetAllCookiesFunction() { | 267 CookiesGetAllFunction::~CookiesGetAllFunction() { |
| 268 } | 268 } |
| 269 | 269 |
| 270 bool GetAllCookiesFunction::RunImpl() { | 270 bool CookiesGetAllFunction::RunImpl() { |
| 271 parsed_args_ = GetAll::Params::Create(*args_); | 271 parsed_args_ = GetAll::Params::Create(*args_); |
| 272 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); | 272 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); |
| 273 | 273 |
| 274 if (parsed_args_->details.url.get() && | 274 if (parsed_args_->details.url.get() && |
| 275 !ParseUrl(*parsed_args_->details.url, &url_, false)) { | 275 !ParseUrl(*parsed_args_->details.url, &url_, false)) { |
| 276 return false; | 276 return false; |
| 277 } | 277 } |
| 278 | 278 |
| 279 std::string store_id = parsed_args_->details.store_id.get() ? | 279 std::string store_id = parsed_args_->details.store_id.get() ? |
| 280 *parsed_args_->details.store_id : ""; | 280 *parsed_args_->details.store_id : ""; |
| 281 net::URLRequestContextGetter* store_context = NULL; | 281 net::URLRequestContextGetter* store_context = NULL; |
| 282 if (!ParseStoreContext(&store_id, &store_context)) | 282 if (!ParseStoreContext(&store_id, &store_context)) |
| 283 return false; | 283 return false; |
| 284 store_context_ = store_context; | 284 store_context_ = store_context; |
| 285 if (!parsed_args_->details.store_id.get()) | 285 if (!parsed_args_->details.store_id.get()) |
| 286 parsed_args_->details.store_id.reset(new std::string(store_id)); | 286 parsed_args_->details.store_id.reset(new std::string(store_id)); |
| 287 | 287 |
| 288 bool rv = BrowserThread::PostTask( | 288 bool rv = BrowserThread::PostTask( |
| 289 BrowserThread::IO, FROM_HERE, | 289 BrowserThread::IO, FROM_HERE, |
| 290 base::Bind(&GetAllCookiesFunction::GetAllCookiesOnIOThread, this)); | 290 base::Bind(&CookiesGetAllFunction::GetAllCookiesOnIOThread, this)); |
| 291 DCHECK(rv); | 291 DCHECK(rv); |
| 292 | 292 |
| 293 // Will finish asynchronously. | 293 // Will finish asynchronously. |
| 294 return true; | 294 return true; |
| 295 } | 295 } |
| 296 | 296 |
| 297 void GetAllCookiesFunction::GetAllCookiesOnIOThread() { | 297 void CookiesGetAllFunction::GetAllCookiesOnIOThread() { |
| 298 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 298 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 299 net::CookieStore* cookie_store = | 299 net::CookieStore* cookie_store = |
| 300 store_context_->GetURLRequestContext()->cookie_store(); | 300 store_context_->GetURLRequestContext()->cookie_store(); |
| 301 cookies_helpers::GetCookieListFromStore( | 301 cookies_helpers::GetCookieListFromStore( |
| 302 cookie_store, url_, | 302 cookie_store, url_, |
| 303 base::Bind(&GetAllCookiesFunction::GetAllCookiesCallback, this)); | 303 base::Bind(&CookiesGetAllFunction::GetAllCookiesCallback, this)); |
| 304 } | 304 } |
| 305 | 305 |
| 306 void GetAllCookiesFunction::GetAllCookiesCallback( | 306 void CookiesGetAllFunction::GetAllCookiesCallback( |
| 307 const net::CookieList& cookie_list) { | 307 const net::CookieList& cookie_list) { |
| 308 const extensions::Extension* extension = GetExtension(); | 308 const extensions::Extension* extension = GetExtension(); |
| 309 if (extension) { | 309 if (extension) { |
| 310 std::vector<linked_ptr<Cookie> > match_vector; | 310 std::vector<linked_ptr<Cookie> > match_vector; |
| 311 cookies_helpers::AppendMatchingCookiesToVector( | 311 cookies_helpers::AppendMatchingCookiesToVector( |
| 312 cookie_list, url_, &parsed_args_->details, | 312 cookie_list, url_, &parsed_args_->details, |
| 313 GetExtension(), &match_vector); | 313 GetExtension(), &match_vector); |
| 314 | 314 |
| 315 results_ = GetAll::Results::Create(match_vector); | 315 results_ = GetAll::Results::Create(match_vector); |
| 316 } | 316 } |
| 317 bool rv = BrowserThread::PostTask( | 317 bool rv = BrowserThread::PostTask( |
| 318 BrowserThread::UI, FROM_HERE, | 318 BrowserThread::UI, FROM_HERE, |
| 319 base::Bind(&GetAllCookiesFunction::RespondOnUIThread, this)); | 319 base::Bind(&CookiesGetAllFunction::RespondOnUIThread, this)); |
| 320 DCHECK(rv); | 320 DCHECK(rv); |
| 321 } | 321 } |
| 322 | 322 |
| 323 void GetAllCookiesFunction::RespondOnUIThread() { | 323 void CookiesGetAllFunction::RespondOnUIThread() { |
| 324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 325 SendResponse(true); | 325 SendResponse(true); |
| 326 } | 326 } |
| 327 | 327 |
| 328 SetCookieFunction::SetCookieFunction() : success_(false) { | 328 CookiesSetFunction::CookiesSetFunction() : success_(false) { |
| 329 } | 329 } |
| 330 | 330 |
| 331 SetCookieFunction::~SetCookieFunction() { | 331 CookiesSetFunction::~CookiesSetFunction() { |
| 332 } | 332 } |
| 333 | 333 |
| 334 bool SetCookieFunction::RunImpl() { | 334 bool CookiesSetFunction::RunImpl() { |
| 335 parsed_args_ = Set::Params::Create(*args_); | 335 parsed_args_ = Set::Params::Create(*args_); |
| 336 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); | 336 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); |
| 337 | 337 |
| 338 // Read/validate input parameters. | 338 // Read/validate input parameters. |
| 339 if (!ParseUrl(parsed_args_->details.url, &url_, true)) | 339 if (!ParseUrl(parsed_args_->details.url, &url_, true)) |
| 340 return false; | 340 return false; |
| 341 | 341 |
| 342 std::string store_id = parsed_args_->details.store_id.get() ? | 342 std::string store_id = parsed_args_->details.store_id.get() ? |
| 343 *parsed_args_->details.store_id : ""; | 343 *parsed_args_->details.store_id : ""; |
| 344 net::URLRequestContextGetter* store_context = NULL; | 344 net::URLRequestContextGetter* store_context = NULL; |
| 345 if (!ParseStoreContext(&store_id, &store_context)) | 345 if (!ParseStoreContext(&store_id, &store_context)) |
| 346 return false; | 346 return false; |
| 347 store_context_ = store_context; | 347 store_context_ = store_context; |
| 348 if (!parsed_args_->details.store_id.get()) | 348 if (!parsed_args_->details.store_id.get()) |
| 349 parsed_args_->details.store_id.reset(new std::string(store_id)); | 349 parsed_args_->details.store_id.reset(new std::string(store_id)); |
| 350 | 350 |
| 351 bool rv = BrowserThread::PostTask( | 351 bool rv = BrowserThread::PostTask( |
| 352 BrowserThread::IO, FROM_HERE, | 352 BrowserThread::IO, FROM_HERE, |
| 353 base::Bind(&SetCookieFunction::SetCookieOnIOThread, this)); | 353 base::Bind(&CookiesSetFunction::SetCookieOnIOThread, this)); |
| 354 DCHECK(rv); | 354 DCHECK(rv); |
| 355 | 355 |
| 356 // Will finish asynchronously. | 356 // Will finish asynchronously. |
| 357 return true; | 357 return true; |
| 358 } | 358 } |
| 359 | 359 |
| 360 void SetCookieFunction::SetCookieOnIOThread() { | 360 void CookiesSetFunction::SetCookieOnIOThread() { |
| 361 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 361 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 362 net::CookieMonster* cookie_monster = | 362 net::CookieMonster* cookie_monster = |
| 363 store_context_->GetURLRequestContext()->cookie_store()-> | 363 store_context_->GetURLRequestContext()->cookie_store()-> |
| 364 GetCookieMonster(); | 364 GetCookieMonster(); |
| 365 | 365 |
| 366 base::Time expiration_time; | 366 base::Time expiration_time; |
| 367 if (parsed_args_->details.expiration_date.get()) { | 367 if (parsed_args_->details.expiration_date.get()) { |
| 368 // Time::FromDoubleT converts double time 0 to empty Time object. So we need | 368 // Time::FromDoubleT converts double time 0 to empty Time object. So we need |
| 369 // to do special handling here. | 369 // to do special handling here. |
| 370 expiration_time = (*parsed_args_->details.expiration_date == 0) ? | 370 expiration_time = (*parsed_args_->details.expiration_date == 0) ? |
| 371 base::Time::UnixEpoch() : | 371 base::Time::UnixEpoch() : |
| 372 base::Time::FromDoubleT(*parsed_args_->details.expiration_date); | 372 base::Time::FromDoubleT(*parsed_args_->details.expiration_date); |
| 373 } | 373 } |
| 374 | 374 |
| 375 cookie_monster->SetCookieWithDetailsAsync( | 375 cookie_monster->SetCookieWithDetailsAsync( |
| 376 url_, | 376 url_, |
| 377 parsed_args_->details.name.get() ? *parsed_args_->details.name : "", | 377 parsed_args_->details.name.get() ? *parsed_args_->details.name : "", |
| 378 parsed_args_->details.value.get() ? *parsed_args_->details.value : "", | 378 parsed_args_->details.value.get() ? *parsed_args_->details.value : "", |
| 379 parsed_args_->details.domain.get() ? *parsed_args_->details.domain : "", | 379 parsed_args_->details.domain.get() ? *parsed_args_->details.domain : "", |
| 380 parsed_args_->details.path.get() ? *parsed_args_->details.path : "", | 380 parsed_args_->details.path.get() ? *parsed_args_->details.path : "", |
| 381 expiration_time, | 381 expiration_time, |
| 382 parsed_args_->details.secure.get() ? | 382 parsed_args_->details.secure.get() ? |
| 383 *parsed_args_->details.secure.get() : | 383 *parsed_args_->details.secure.get() : |
| 384 false, | 384 false, |
| 385 parsed_args_->details.http_only.get() ? | 385 parsed_args_->details.http_only.get() ? |
| 386 *parsed_args_->details.http_only : | 386 *parsed_args_->details.http_only : |
| 387 false, | 387 false, |
| 388 base::Bind(&SetCookieFunction::PullCookie, this)); | 388 base::Bind(&CookiesSetFunction::PullCookie, this)); |
| 389 } | 389 } |
| 390 | 390 |
| 391 void SetCookieFunction::PullCookie(bool set_cookie_result) { | 391 void CookiesSetFunction::PullCookie(bool set_cookie_result) { |
| 392 // Pull the newly set cookie. | 392 // Pull the newly set cookie. |
| 393 net::CookieMonster* cookie_monster = | 393 net::CookieMonster* cookie_monster = |
| 394 store_context_->GetURLRequestContext()->cookie_store()-> | 394 store_context_->GetURLRequestContext()->cookie_store()-> |
| 395 GetCookieMonster(); | 395 GetCookieMonster(); |
| 396 success_ = set_cookie_result; | 396 success_ = set_cookie_result; |
| 397 cookies_helpers::GetCookieListFromStore( | 397 cookies_helpers::GetCookieListFromStore( |
| 398 cookie_monster, url_, | 398 cookie_monster, url_, |
| 399 base::Bind(&SetCookieFunction::PullCookieCallback, this)); | 399 base::Bind(&CookiesSetFunction::PullCookieCallback, this)); |
| 400 } | 400 } |
| 401 | 401 |
| 402 void SetCookieFunction::PullCookieCallback(const net::CookieList& cookie_list) { | 402 void CookiesSetFunction::PullCookieCallback( |
| 403 const net::CookieList& cookie_list) { |
| 403 net::CookieList::const_iterator it; | 404 net::CookieList::const_iterator it; |
| 404 for (it = cookie_list.begin(); it != cookie_list.end(); ++it) { | 405 for (it = cookie_list.begin(); it != cookie_list.end(); ++it) { |
| 405 // Return the first matching cookie. Relies on the fact that the | 406 // Return the first matching cookie. Relies on the fact that the |
| 406 // CookieMonster returns them in canonical order (longest path, then | 407 // CookieMonster returns them in canonical order (longest path, then |
| 407 // earliest creation time). | 408 // earliest creation time). |
| 408 std::string name = parsed_args_->details.name.get() ? | 409 std::string name = parsed_args_->details.name.get() ? |
| 409 *parsed_args_->details.name : ""; | 410 *parsed_args_->details.name : ""; |
| 410 if (it->Name() == name) { | 411 if (it->Name() == name) { |
| 411 scoped_ptr<Cookie> cookie( | 412 scoped_ptr<Cookie> cookie( |
| 412 cookies_helpers::CreateCookie(*it, *parsed_args_->details.store_id)); | 413 cookies_helpers::CreateCookie(*it, *parsed_args_->details.store_id)); |
| 413 results_ = Set::Results::Create(*cookie); | 414 results_ = Set::Results::Create(*cookie); |
| 414 break; | 415 break; |
| 415 } | 416 } |
| 416 } | 417 } |
| 417 | 418 |
| 418 bool rv = BrowserThread::PostTask( | 419 bool rv = BrowserThread::PostTask( |
| 419 BrowserThread::UI, FROM_HERE, | 420 BrowserThread::UI, FROM_HERE, |
| 420 base::Bind(&SetCookieFunction::RespondOnUIThread, this)); | 421 base::Bind(&CookiesSetFunction::RespondOnUIThread, this)); |
| 421 DCHECK(rv); | 422 DCHECK(rv); |
| 422 } | 423 } |
| 423 | 424 |
| 424 void SetCookieFunction::RespondOnUIThread() { | 425 void CookiesSetFunction::RespondOnUIThread() { |
| 425 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 426 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 426 if (!success_) { | 427 if (!success_) { |
| 427 std::string name = parsed_args_->details.name.get() ? | 428 std::string name = parsed_args_->details.name.get() ? |
| 428 *parsed_args_->details.name : ""; | 429 *parsed_args_->details.name : ""; |
| 429 error_ = ErrorUtils::FormatErrorMessage( | 430 error_ = ErrorUtils::FormatErrorMessage( |
| 430 keys::kCookieSetFailedError, name); | 431 keys::kCookieSetFailedError, name); |
| 431 } | 432 } |
| 432 SendResponse(success_); | 433 SendResponse(success_); |
| 433 } | 434 } |
| 434 | 435 |
| 435 RemoveCookieFunction::RemoveCookieFunction() { | 436 CookiesRemoveFunction::CookiesRemoveFunction() { |
| 436 } | 437 } |
| 437 | 438 |
| 438 RemoveCookieFunction::~RemoveCookieFunction() { | 439 CookiesRemoveFunction::~CookiesRemoveFunction() { |
| 439 } | 440 } |
| 440 | 441 |
| 441 bool RemoveCookieFunction::RunImpl() { | 442 bool CookiesRemoveFunction::RunImpl() { |
| 442 parsed_args_ = Remove::Params::Create(*args_); | 443 parsed_args_ = Remove::Params::Create(*args_); |
| 443 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); | 444 EXTENSION_FUNCTION_VALIDATE(parsed_args_.get()); |
| 444 | 445 |
| 445 // Read/validate input parameters. | 446 // Read/validate input parameters. |
| 446 if (!ParseUrl(parsed_args_->details.url, &url_, true)) | 447 if (!ParseUrl(parsed_args_->details.url, &url_, true)) |
| 447 return false; | 448 return false; |
| 448 | 449 |
| 449 std::string store_id = parsed_args_->details.store_id.get() ? | 450 std::string store_id = parsed_args_->details.store_id.get() ? |
| 450 *parsed_args_->details.store_id : ""; | 451 *parsed_args_->details.store_id : ""; |
| 451 net::URLRequestContextGetter* store_context = NULL; | 452 net::URLRequestContextGetter* store_context = NULL; |
| 452 if (!ParseStoreContext(&store_id, &store_context)) | 453 if (!ParseStoreContext(&store_id, &store_context)) |
| 453 return false; | 454 return false; |
| 454 store_context_ = store_context; | 455 store_context_ = store_context; |
| 455 if (!parsed_args_->details.store_id.get()) | 456 if (!parsed_args_->details.store_id.get()) |
| 456 parsed_args_->details.store_id.reset(new std::string(store_id)); | 457 parsed_args_->details.store_id.reset(new std::string(store_id)); |
| 457 | 458 |
| 458 // Pass the work off to the IO thread. | 459 // Pass the work off to the IO thread. |
| 459 bool rv = BrowserThread::PostTask( | 460 bool rv = BrowserThread::PostTask( |
| 460 BrowserThread::IO, FROM_HERE, | 461 BrowserThread::IO, FROM_HERE, |
| 461 base::Bind(&RemoveCookieFunction::RemoveCookieOnIOThread, this)); | 462 base::Bind(&CookiesRemoveFunction::RemoveCookieOnIOThread, this)); |
| 462 DCHECK(rv); | 463 DCHECK(rv); |
| 463 | 464 |
| 464 // Will return asynchronously. | 465 // Will return asynchronously. |
| 465 return true; | 466 return true; |
| 466 } | 467 } |
| 467 | 468 |
| 468 void RemoveCookieFunction::RemoveCookieOnIOThread() { | 469 void CookiesRemoveFunction::RemoveCookieOnIOThread() { |
| 469 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 470 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 470 | 471 |
| 471 // Remove the cookie | 472 // Remove the cookie |
| 472 net::CookieStore* cookie_store = | 473 net::CookieStore* cookie_store = |
| 473 store_context_->GetURLRequestContext()->cookie_store(); | 474 store_context_->GetURLRequestContext()->cookie_store(); |
| 474 cookie_store->DeleteCookieAsync( | 475 cookie_store->DeleteCookieAsync( |
| 475 url_, parsed_args_->details.name, | 476 url_, parsed_args_->details.name, |
| 476 base::Bind(&RemoveCookieFunction::RemoveCookieCallback, this)); | 477 base::Bind(&CookiesRemoveFunction::RemoveCookieCallback, this)); |
| 477 } | 478 } |
| 478 | 479 |
| 479 void RemoveCookieFunction::RemoveCookieCallback() { | 480 void CookiesRemoveFunction::RemoveCookieCallback() { |
| 480 // Build the callback result | 481 // Build the callback result |
| 481 Remove::Results::Details details; | 482 Remove::Results::Details details; |
| 482 details.name = parsed_args_->details.name; | 483 details.name = parsed_args_->details.name; |
| 483 details.url = url_.spec(); | 484 details.url = url_.spec(); |
| 484 details.store_id = *parsed_args_->details.store_id; | 485 details.store_id = *parsed_args_->details.store_id; |
| 485 results_ = Remove::Results::Create(details); | 486 results_ = Remove::Results::Create(details); |
| 486 | 487 |
| 487 // Return to UI thread | 488 // Return to UI thread |
| 488 bool rv = BrowserThread::PostTask( | 489 bool rv = BrowserThread::PostTask( |
| 489 BrowserThread::UI, FROM_HERE, | 490 BrowserThread::UI, FROM_HERE, |
| 490 base::Bind(&RemoveCookieFunction::RespondOnUIThread, this)); | 491 base::Bind(&CookiesRemoveFunction::RespondOnUIThread, this)); |
| 491 DCHECK(rv); | 492 DCHECK(rv); |
| 492 } | 493 } |
| 493 | 494 |
| 494 void RemoveCookieFunction::RespondOnUIThread() { | 495 void CookiesRemoveFunction::RespondOnUIThread() { |
| 495 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 496 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 496 SendResponse(true); | 497 SendResponse(true); |
| 497 } | 498 } |
| 498 | 499 |
| 499 bool GetAllCookieStoresFunction::RunImpl() { | 500 bool CookiesGetAllCookieStoresFunction::RunImpl() { |
| 500 Profile* original_profile = profile(); | 501 Profile* original_profile = profile(); |
| 501 DCHECK(original_profile); | 502 DCHECK(original_profile); |
| 502 scoped_ptr<ListValue> original_tab_ids(new ListValue()); | 503 scoped_ptr<ListValue> original_tab_ids(new ListValue()); |
| 503 Profile* incognito_profile = NULL; | 504 Profile* incognito_profile = NULL; |
| 504 scoped_ptr<ListValue> incognito_tab_ids; | 505 scoped_ptr<ListValue> incognito_tab_ids; |
| 505 if (include_incognito() && profile()->HasOffTheRecordProfile()) { | 506 if (include_incognito() && profile()->HasOffTheRecordProfile()) { |
| 506 incognito_profile = profile()->GetOffTheRecordProfile(); | 507 incognito_profile = profile()->GetOffTheRecordProfile(); |
| 507 if (incognito_profile) | 508 if (incognito_profile) |
| 508 incognito_tab_ids.reset(new ListValue()); | 509 incognito_tab_ids.reset(new ListValue()); |
| 509 } | 510 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 532 if (incognito_tab_ids.get() && incognito_tab_ids->GetSize() > 0 && | 533 if (incognito_tab_ids.get() && incognito_tab_ids->GetSize() > 0 && |
| 533 incognito_profile) { | 534 incognito_profile) { |
| 534 cookie_stores.push_back(make_linked_ptr( | 535 cookie_stores.push_back(make_linked_ptr( |
| 535 cookies_helpers::CreateCookieStore( | 536 cookies_helpers::CreateCookieStore( |
| 536 incognito_profile, incognito_tab_ids.release()).release())); | 537 incognito_profile, incognito_tab_ids.release()).release())); |
| 537 } | 538 } |
| 538 results_ = GetAllCookieStores::Results::Create(cookie_stores); | 539 results_ = GetAllCookieStores::Results::Create(cookie_stores); |
| 539 return true; | 540 return true; |
| 540 } | 541 } |
| 541 | 542 |
| 542 void GetAllCookieStoresFunction::Run() { | 543 void CookiesGetAllCookieStoresFunction::Run() { |
| 543 SendResponse(RunImpl()); | 544 SendResponse(RunImpl()); |
| 544 } | 545 } |
| 545 | 546 |
| 546 CookiesAPI::CookiesAPI(Profile* profile) | 547 CookiesAPI::CookiesAPI(Profile* profile) |
| 547 : profile_(profile) { | 548 : profile_(profile) { |
| 548 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( | 549 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( |
| 549 this, keys::kOnChanged); | 550 this, keys::kOnChanged); |
| 550 } | 551 } |
| 551 | 552 |
| 552 CookiesAPI::~CookiesAPI() { | 553 CookiesAPI::~CookiesAPI() { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 564 return &g_factory.Get(); | 565 return &g_factory.Get(); |
| 565 } | 566 } |
| 566 | 567 |
| 567 void CookiesAPI::OnListenerAdded( | 568 void CookiesAPI::OnListenerAdded( |
| 568 const extensions::EventListenerInfo& details) { | 569 const extensions::EventListenerInfo& details) { |
| 569 cookies_event_router_.reset(new CookiesEventRouter(profile_)); | 570 cookies_event_router_.reset(new CookiesEventRouter(profile_)); |
| 570 ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this); | 571 ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this); |
| 571 } | 572 } |
| 572 | 573 |
| 573 } // namespace extensions | 574 } // namespace extensions |
| OLD | NEW |