| 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 #include "chrome/browser/extensions/api/history/history_api.h" | 5 #include "chrome/browser/extensions/api/history/history_api.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 MessageLoop::current()->PostTask( | 261 MessageLoop::current()->PostTask( |
| 262 FROM_HERE, | 262 FROM_HERE, |
| 263 base::Bind(&HistoryFunctionWithCallback::SendResponseToCallback, this)); | 263 base::Bind(&HistoryFunctionWithCallback::SendResponseToCallback, this)); |
| 264 } | 264 } |
| 265 | 265 |
| 266 void HistoryFunctionWithCallback::SendResponseToCallback() { | 266 void HistoryFunctionWithCallback::SendResponseToCallback() { |
| 267 SendResponse(true); | 267 SendResponse(true); |
| 268 Release(); // Balanced in RunImpl(). | 268 Release(); // Balanced in RunImpl(). |
| 269 } | 269 } |
| 270 | 270 |
| 271 bool HistoryGetMostVisitedFunction::RunAsyncImpl() { | 271 bool GetMostVisitedHistoryFunction::RunAsyncImpl() { |
| 272 scoped_ptr<GetMostVisited::Params> params = | 272 scoped_ptr<GetMostVisited::Params> params = |
| 273 GetMostVisited::Params::Create(*args_); | 273 GetMostVisited::Params::Create(*args_); |
| 274 EXTENSION_FUNCTION_VALIDATE(params.get()); | 274 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 275 | 275 |
| 276 history::VisitFilter filter; | 276 history::VisitFilter filter; |
| 277 if (params->details.filter_time.get()) | 277 if (params->details.filter_time.get()) |
| 278 filter.SetFilterTime(GetTime(*params->details.filter_time)); | 278 filter.SetFilterTime(GetTime(*params->details.filter_time)); |
| 279 if (params->details.filter_width.get()) { | 279 if (params->details.filter_width.get()) { |
| 280 filter.SetFilterWidth(base::TimeDelta::FromMilliseconds( | 280 filter.SetFilterWidth(base::TimeDelta::FromMilliseconds( |
| 281 static_cast<int64>(*params->details.filter_width))); | 281 static_cast<int64>(*params->details.filter_width))); |
| 282 } | 282 } |
| 283 if (params->details.day_of_the_week.get()) | 283 if (params->details.day_of_the_week.get()) |
| 284 filter.SetDayOfTheWeekFilter(*params->details.day_of_the_week); | 284 filter.SetDayOfTheWeekFilter(*params->details.day_of_the_week); |
| 285 int max_results = 100; | 285 int max_results = 100; |
| 286 if (params->details.max_results.get()) | 286 if (params->details.max_results.get()) |
| 287 max_results = *params->details.max_results; | 287 max_results = *params->details.max_results; |
| 288 HistoryService* hs = | 288 HistoryService* hs = |
| 289 HistoryServiceFactory::GetForProfile(profile(), Profile::EXPLICIT_ACCESS); | 289 HistoryServiceFactory::GetForProfile(profile(), Profile::EXPLICIT_ACCESS); |
| 290 hs->QueryFilteredURLs(max_results, filter, false, &cancelable_consumer_, | 290 hs->QueryFilteredURLs(max_results, filter, false, &cancelable_consumer_, |
| 291 base::Bind(&HistoryGetMostVisitedFunction::QueryComplete, | 291 base::Bind(&GetMostVisitedHistoryFunction::QueryComplete, |
| 292 base::Unretained(this))); | 292 base::Unretained(this))); |
| 293 return true; | 293 return true; |
| 294 } | 294 } |
| 295 | 295 |
| 296 void HistoryGetMostVisitedFunction::QueryComplete( | 296 void GetMostVisitedHistoryFunction::QueryComplete( |
| 297 CancelableRequestProvider::Handle handle, | 297 CancelableRequestProvider::Handle handle, |
| 298 const history::FilteredURLList& data) { | 298 const history::FilteredURLList& data) { |
| 299 std::vector<linked_ptr<MostVisitedItem> > results; | 299 std::vector<linked_ptr<MostVisitedItem> > results; |
| 300 results.reserve(data.size()); | 300 results.reserve(data.size()); |
| 301 for (size_t i = 0; i < data.size(); i++) { | 301 for (size_t i = 0; i < data.size(); i++) { |
| 302 linked_ptr<MostVisitedItem> item(new MostVisitedItem); | 302 linked_ptr<MostVisitedItem> item(new MostVisitedItem); |
| 303 item->url = data[i].url.spec(); | 303 item->url = data[i].url.spec(); |
| 304 item->title = UTF16ToUTF8(data[i].title); | 304 item->title = UTF16ToUTF8(data[i].title); |
| 305 results.push_back(item); | 305 results.push_back(item); |
| 306 } | 306 } |
| 307 results_ = GetMostVisited::Results::Create(results); | 307 results_ = GetMostVisited::Results::Create(results); |
| 308 SendAsyncResponse(); | 308 SendAsyncResponse(); |
| 309 } | 309 } |
| 310 | 310 |
| 311 bool HistoryGetVisitsFunction::RunAsyncImpl() { | 311 bool GetVisitsHistoryFunction::RunAsyncImpl() { |
| 312 scoped_ptr<GetVisits::Params> params(GetVisits::Params::Create(*args_)); | 312 scoped_ptr<GetVisits::Params> params(GetVisits::Params::Create(*args_)); |
| 313 EXTENSION_FUNCTION_VALIDATE(params.get()); | 313 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 314 | 314 |
| 315 GURL url; | 315 GURL url; |
| 316 if (!ValidateUrl(params->details.url, &url)) | 316 if (!ValidateUrl(params->details.url, &url)) |
| 317 return false; | 317 return false; |
| 318 | 318 |
| 319 HistoryService* hs = | 319 HistoryService* hs = |
| 320 HistoryServiceFactory::GetForProfile(profile(), | 320 HistoryServiceFactory::GetForProfile(profile(), |
| 321 Profile::EXPLICIT_ACCESS); | 321 Profile::EXPLICIT_ACCESS); |
| 322 hs->QueryURL(url, | 322 hs->QueryURL(url, |
| 323 true, // Retrieve full history of a URL. | 323 true, // Retrieve full history of a URL. |
| 324 &cancelable_consumer_, | 324 &cancelable_consumer_, |
| 325 base::Bind(&HistoryGetVisitsFunction::QueryComplete, | 325 base::Bind(&GetVisitsHistoryFunction::QueryComplete, |
| 326 base::Unretained(this))); | 326 base::Unretained(this))); |
| 327 | 327 |
| 328 return true; | 328 return true; |
| 329 } | 329 } |
| 330 | 330 |
| 331 void HistoryGetVisitsFunction::QueryComplete( | 331 void GetVisitsHistoryFunction::QueryComplete( |
| 332 HistoryService::Handle request_service, | 332 HistoryService::Handle request_service, |
| 333 bool success, | 333 bool success, |
| 334 const history::URLRow* url_row, | 334 const history::URLRow* url_row, |
| 335 history::VisitVector* visits) { | 335 history::VisitVector* visits) { |
| 336 VisitItemList visit_item_vec; | 336 VisitItemList visit_item_vec; |
| 337 if (visits && !visits->empty()) { | 337 if (visits && !visits->empty()) { |
| 338 for (history::VisitVector::iterator iterator = visits->begin(); | 338 for (history::VisitVector::iterator iterator = visits->begin(); |
| 339 iterator != visits->end(); | 339 iterator != visits->end(); |
| 340 ++iterator) { | 340 ++iterator) { |
| 341 visit_item_vec.push_back(make_linked_ptr( | 341 visit_item_vec.push_back(make_linked_ptr( |
| 342 GetVisitItem(*iterator).release())); | 342 GetVisitItem(*iterator).release())); |
| 343 } | 343 } |
| 344 } | 344 } |
| 345 | 345 |
| 346 results_ = GetVisits::Results::Create(visit_item_vec); | 346 results_ = GetVisits::Results::Create(visit_item_vec); |
| 347 SendAsyncResponse(); | 347 SendAsyncResponse(); |
| 348 } | 348 } |
| 349 | 349 |
| 350 bool HistorySearchFunction::RunAsyncImpl() { | 350 bool SearchHistoryFunction::RunAsyncImpl() { |
| 351 scoped_ptr<Search::Params> params(Search::Params::Create(*args_)); | 351 scoped_ptr<Search::Params> params(Search::Params::Create(*args_)); |
| 352 EXTENSION_FUNCTION_VALIDATE(params.get()); | 352 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 353 | 353 |
| 354 string16 search_text = UTF8ToUTF16(params->query.text); | 354 string16 search_text = UTF8ToUTF16(params->query.text); |
| 355 | 355 |
| 356 history::QueryOptions options; | 356 history::QueryOptions options; |
| 357 options.SetRecentDayRange(1); | 357 options.SetRecentDayRange(1); |
| 358 options.max_count = 100; | 358 options.max_count = 100; |
| 359 | 359 |
| 360 if (params->query.start_time.get()) | 360 if (params->query.start_time.get()) |
| 361 options.begin_time = GetTime(*params->query.start_time); | 361 options.begin_time = GetTime(*params->query.start_time); |
| 362 if (params->query.end_time.get()) | 362 if (params->query.end_time.get()) |
| 363 options.end_time = GetTime(*params->query.end_time); | 363 options.end_time = GetTime(*params->query.end_time); |
| 364 if (params->query.max_results.get()) | 364 if (params->query.max_results.get()) |
| 365 options.max_count = *params->query.max_results; | 365 options.max_count = *params->query.max_results; |
| 366 | 366 |
| 367 HistoryService* hs = | 367 HistoryService* hs = |
| 368 HistoryServiceFactory::GetForProfile(profile(), | 368 HistoryServiceFactory::GetForProfile(profile(), |
| 369 Profile::EXPLICIT_ACCESS); | 369 Profile::EXPLICIT_ACCESS); |
| 370 hs->QueryHistory(search_text, options, &cancelable_consumer_, | 370 hs->QueryHistory(search_text, options, &cancelable_consumer_, |
| 371 base::Bind(&HistorySearchFunction::SearchComplete, | 371 base::Bind(&SearchHistoryFunction::SearchComplete, |
| 372 base::Unretained(this))); | 372 base::Unretained(this))); |
| 373 | 373 |
| 374 return true; | 374 return true; |
| 375 } | 375 } |
| 376 | 376 |
| 377 void HistorySearchFunction::SearchComplete( | 377 void SearchHistoryFunction::SearchComplete( |
| 378 HistoryService::Handle request_handle, | 378 HistoryService::Handle request_handle, |
| 379 history::QueryResults* results) { | 379 history::QueryResults* results) { |
| 380 HistoryItemList history_item_vec; | 380 HistoryItemList history_item_vec; |
| 381 if (results && !results->empty()) { | 381 if (results && !results->empty()) { |
| 382 for (history::QueryResults::URLResultVector::const_iterator iterator = | 382 for (history::QueryResults::URLResultVector::const_iterator iterator = |
| 383 results->begin(); | 383 results->begin(); |
| 384 iterator != results->end(); | 384 iterator != results->end(); |
| 385 ++iterator) { | 385 ++iterator) { |
| 386 history_item_vec.push_back(make_linked_ptr( | 386 history_item_vec.push_back(make_linked_ptr( |
| 387 GetHistoryItem(**iterator).release())); | 387 GetHistoryItem(**iterator).release())); |
| 388 } | 388 } |
| 389 } | 389 } |
| 390 results_ = Search::Results::Create(history_item_vec); | 390 results_ = Search::Results::Create(history_item_vec); |
| 391 SendAsyncResponse(); | 391 SendAsyncResponse(); |
| 392 } | 392 } |
| 393 | 393 |
| 394 bool HistoryAddUrlFunction::RunImpl() { | 394 bool AddUrlHistoryFunction::RunImpl() { |
| 395 scoped_ptr<AddUrl::Params> params(AddUrl::Params::Create(*args_)); | 395 scoped_ptr<AddUrl::Params> params(AddUrl::Params::Create(*args_)); |
| 396 EXTENSION_FUNCTION_VALIDATE(params.get()); | 396 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 397 | 397 |
| 398 GURL url; | 398 GURL url; |
| 399 if (!ValidateUrl(params->details.url, &url)) | 399 if (!ValidateUrl(params->details.url, &url)) |
| 400 return false; | 400 return false; |
| 401 | 401 |
| 402 HistoryService* hs = | 402 HistoryService* hs = |
| 403 HistoryServiceFactory::GetForProfile(profile(), | 403 HistoryServiceFactory::GetForProfile(profile(), |
| 404 Profile::EXPLICIT_ACCESS); | 404 Profile::EXPLICIT_ACCESS); |
| 405 hs->AddPage(url, base::Time::Now(), history::SOURCE_EXTENSION); | 405 hs->AddPage(url, base::Time::Now(), history::SOURCE_EXTENSION); |
| 406 | 406 |
| 407 SendResponse(true); | 407 SendResponse(true); |
| 408 return true; | 408 return true; |
| 409 } | 409 } |
| 410 | 410 |
| 411 bool HistoryDeleteUrlFunction::RunImpl() { | 411 bool DeleteUrlHistoryFunction::RunImpl() { |
| 412 scoped_ptr<DeleteUrl::Params> params(DeleteUrl::Params::Create(*args_)); | 412 scoped_ptr<DeleteUrl::Params> params(DeleteUrl::Params::Create(*args_)); |
| 413 EXTENSION_FUNCTION_VALIDATE(params.get()); | 413 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 414 | 414 |
| 415 GURL url; | 415 GURL url; |
| 416 if (!ValidateUrl(params->details.url, &url)) | 416 if (!ValidateUrl(params->details.url, &url)) |
| 417 return false; | 417 return false; |
| 418 | 418 |
| 419 HistoryService* hs = | 419 HistoryService* hs = |
| 420 HistoryServiceFactory::GetForProfile(profile(), | 420 HistoryServiceFactory::GetForProfile(profile(), |
| 421 Profile::EXPLICIT_ACCESS); | 421 Profile::EXPLICIT_ACCESS); |
| 422 hs->DeleteURL(url); | 422 hs->DeleteURL(url); |
| 423 | 423 |
| 424 SendResponse(true); | 424 SendResponse(true); |
| 425 return true; | 425 return true; |
| 426 } | 426 } |
| 427 | 427 |
| 428 bool HistoryDeleteRangeFunction::RunAsyncImpl() { | 428 bool DeleteRangeHistoryFunction::RunAsyncImpl() { |
| 429 scoped_ptr<DeleteRange::Params> params(DeleteRange::Params::Create(*args_)); | 429 scoped_ptr<DeleteRange::Params> params(DeleteRange::Params::Create(*args_)); |
| 430 EXTENSION_FUNCTION_VALIDATE(params.get()); | 430 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 431 | 431 |
| 432 base::Time start_time = GetTime(params->range.start_time); | 432 base::Time start_time = GetTime(params->range.start_time); |
| 433 base::Time end_time = GetTime(params->range.end_time); | 433 base::Time end_time = GetTime(params->range.end_time); |
| 434 | 434 |
| 435 std::set<GURL> restrict_urls; | 435 std::set<GURL> restrict_urls; |
| 436 HistoryService* hs = | 436 HistoryService* hs = |
| 437 HistoryServiceFactory::GetForProfile(profile(), | 437 HistoryServiceFactory::GetForProfile(profile(), |
| 438 Profile::EXPLICIT_ACCESS); | 438 Profile::EXPLICIT_ACCESS); |
| 439 hs->ExpireHistoryBetween( | 439 hs->ExpireHistoryBetween( |
| 440 restrict_urls, | 440 restrict_urls, |
| 441 start_time, | 441 start_time, |
| 442 end_time, | 442 end_time, |
| 443 base::Bind(&HistoryDeleteRangeFunction::DeleteComplete, | 443 base::Bind(&DeleteRangeHistoryFunction::DeleteComplete, |
| 444 base::Unretained(this)), | 444 base::Unretained(this)), |
| 445 &task_tracker_); | 445 &task_tracker_); |
| 446 | 446 |
| 447 return true; | 447 return true; |
| 448 } | 448 } |
| 449 | 449 |
| 450 void HistoryDeleteRangeFunction::DeleteComplete() { | 450 void DeleteRangeHistoryFunction::DeleteComplete() { |
| 451 SendAsyncResponse(); | 451 SendAsyncResponse(); |
| 452 } | 452 } |
| 453 | 453 |
| 454 bool HistoryDeleteAllFunction::RunAsyncImpl() { | 454 bool DeleteAllHistoryFunction::RunAsyncImpl() { |
| 455 std::set<GURL> restrict_urls; | 455 std::set<GURL> restrict_urls; |
| 456 HistoryService* hs = | 456 HistoryService* hs = |
| 457 HistoryServiceFactory::GetForProfile(profile(), | 457 HistoryServiceFactory::GetForProfile(profile(), |
| 458 Profile::EXPLICIT_ACCESS); | 458 Profile::EXPLICIT_ACCESS); |
| 459 hs->ExpireHistoryBetween( | 459 hs->ExpireHistoryBetween( |
| 460 restrict_urls, | 460 restrict_urls, |
| 461 base::Time::UnixEpoch(), // From the beginning of the epoch. | 461 base::Time::UnixEpoch(), // From the beginning of the epoch. |
| 462 base::Time::Now(), // To the current time. | 462 base::Time::Now(), // To the current time. |
| 463 base::Bind(&HistoryDeleteAllFunction::DeleteComplete, | 463 base::Bind(&DeleteAllHistoryFunction::DeleteComplete, |
| 464 base::Unretained(this)), | 464 base::Unretained(this)), |
| 465 &task_tracker_); | 465 &task_tracker_); |
| 466 | 466 |
| 467 return true; | 467 return true; |
| 468 } | 468 } |
| 469 | 469 |
| 470 void HistoryDeleteAllFunction::DeleteComplete() { | 470 void DeleteAllHistoryFunction::DeleteComplete() { |
| 471 SendAsyncResponse(); | 471 SendAsyncResponse(); |
| 472 } | 472 } |
| 473 | 473 |
| 474 } // namespace extensions | 474 } // namespace extensions |
| OLD | NEW |