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

Side by Side Diff: chrome/browser/extensions/api/downloads/downloads_api.cc

Issue 1549233002: Convert Pass()→std::move() in //chrome/browser/extensions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 12 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
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 #include "chrome/browser/extensions/api/downloads/downloads_api.h" 5 #include "chrome/browser/extensions/api/downloads/downloads_api.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9
10 #include <set> 9 #include <set>
11 #include <string> 10 #include <string>
11 #include <utility>
12 12
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/bind_helpers.h" 14 #include "base/bind_helpers.h"
15 #include "base/callback.h" 15 #include "base/callback.h"
16 #include "base/files/file_path.h" 16 #include "base/files/file_path.h"
17 #include "base/files/file_util.h" 17 #include "base/files/file_util.h"
18 #include "base/json/json_writer.h" 18 #include "base/json/json_writer.h"
19 #include "base/lazy_instance.h" 19 #include "base/lazy_instance.h"
20 #include "base/location.h" 20 #include "base/location.h"
21 #include "base/logging.h" 21 #include "base/logging.h"
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 return; 533 return;
534 } 534 }
535 query_out.AddFilter(danger_type); 535 query_out.AddFilter(danger_type);
536 } 536 }
537 if (query_in.order_by.get()) { 537 if (query_in.order_by.get()) {
538 CompileDownloadQueryOrderBy(*query_in.order_by.get(), error, &query_out); 538 CompileDownloadQueryOrderBy(*query_in.order_by.get(), error, &query_out);
539 if (!error->empty()) 539 if (!error->empty())
540 return; 540 return;
541 } 541 }
542 542
543 scoped_ptr<base::DictionaryValue> query_in_value(query_in.ToValue().Pass()); 543 scoped_ptr<base::DictionaryValue> query_in_value(query_in.ToValue());
544 for (base::DictionaryValue::Iterator query_json_field(*query_in_value.get()); 544 for (base::DictionaryValue::Iterator query_json_field(*query_in_value.get());
545 !query_json_field.IsAtEnd(); query_json_field.Advance()) { 545 !query_json_field.IsAtEnd(); query_json_field.Advance()) {
546 FilterTypeMap::const_iterator filter_type = 546 FilterTypeMap::const_iterator filter_type =
547 filter_types.Get().find(query_json_field.key()); 547 filter_types.Get().find(query_json_field.key());
548 if (filter_type != filter_types.Get().end()) { 548 if (filter_type != filter_types.Get().end()) {
549 if (!query_out.AddFilter(filter_type->second, query_json_field.value())) { 549 if (!query_out.AddFilter(filter_type->second, query_json_field.value())) {
550 *error = errors::kInvalidFilter; 550 *error = errors::kInvalidFilter;
551 return; 551 return;
552 } 552 }
553 } 553 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 594
595 static void Remove(DownloadItem* download_item) { 595 static void Remove(DownloadItem* download_item) {
596 download_item->RemoveUserData(kKey); 596 download_item->RemoveUserData(kKey);
597 } 597 }
598 598
599 explicit ExtensionDownloadsEventRouterData( 599 explicit ExtensionDownloadsEventRouterData(
600 DownloadItem* download_item, 600 DownloadItem* download_item,
601 scoped_ptr<base::DictionaryValue> json_item) 601 scoped_ptr<base::DictionaryValue> json_item)
602 : updated_(0), 602 : updated_(0),
603 changed_fired_(0), 603 changed_fired_(0),
604 json_(json_item.Pass()), 604 json_(std::move(json_item)),
605 creator_conflict_action_( 605 creator_conflict_action_(downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY),
606 downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY),
607 determined_conflict_action_( 606 determined_conflict_action_(
608 downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY) { 607 downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY) {
609 DCHECK_CURRENTLY_ON(BrowserThread::UI); 608 DCHECK_CURRENTLY_ON(BrowserThread::UI);
610 download_item->SetUserData(kKey, this); 609 download_item->SetUserData(kKey, this);
611 } 610 }
612 611
613 ~ExtensionDownloadsEventRouterData() override { 612 ~ExtensionDownloadsEventRouterData() override {
614 if (updated_ > 0) { 613 if (updated_ > 0) {
615 UMA_HISTOGRAM_PERCENTAGE("Download.OnChanged", 614 UMA_HISTOGRAM_PERCENTAGE("Download.OnChanged",
616 (changed_fired_ * 100 / updated_)); 615 (changed_fired_ * 100 / updated_));
617 } 616 }
618 } 617 }
619 618
620 const base::DictionaryValue& json() const { return *json_.get(); } 619 const base::DictionaryValue& json() const { return *json_.get(); }
621 void set_json(scoped_ptr<base::DictionaryValue> json_item) { 620 void set_json(scoped_ptr<base::DictionaryValue> json_item) {
622 json_ = json_item.Pass(); 621 json_ = std::move(json_item);
623 } 622 }
624 623
625 void OnItemUpdated() { ++updated_; } 624 void OnItemUpdated() { ++updated_; }
626 void OnChangedFired() { ++changed_fired_; } 625 void OnChangedFired() { ++changed_fired_; }
627 626
628 static void SetDetermineFilenameTimeoutSecondsForTesting(int s) { 627 static void SetDetermineFilenameTimeoutSecondsForTesting(int s) {
629 determine_filename_timeout_s_ = s; 628 determine_filename_timeout_s_ = s;
630 } 629 }
631 630
632 void BeginFilenameDetermination( 631 void BeginFilenameDetermination(
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
1018 if (options.body.get()) 1017 if (options.body.get())
1019 download_params->set_post_body(*options.body.get()); 1018 download_params->set_post_body(*options.body.get());
1020 download_params->set_callback(base::Bind( 1019 download_params->set_callback(base::Bind(
1021 &DownloadsDownloadFunction::OnStarted, this, 1020 &DownloadsDownloadFunction::OnStarted, this,
1022 creator_suggested_filename, options.conflict_action)); 1021 creator_suggested_filename, options.conflict_action));
1023 // Prevent login prompts for 401/407 responses. 1022 // Prevent login prompts for 401/407 responses.
1024 download_params->set_do_not_prompt_for_login(true); 1023 download_params->set_do_not_prompt_for_login(true);
1025 1024
1026 DownloadManager* manager = BrowserContext::GetDownloadManager( 1025 DownloadManager* manager = BrowserContext::GetDownloadManager(
1027 current_profile); 1026 current_profile);
1028 manager->DownloadUrl(download_params.Pass()); 1027 manager->DownloadUrl(std::move(download_params));
1029 RecordDownloadSource(DOWNLOAD_INITIATED_BY_EXTENSION); 1028 RecordDownloadSource(DOWNLOAD_INITIATED_BY_EXTENSION);
1030 RecordApiFunctions(DOWNLOADS_FUNCTION_DOWNLOAD); 1029 RecordApiFunctions(DOWNLOADS_FUNCTION_DOWNLOAD);
1031 return true; 1030 return true;
1032 } 1031 }
1033 1032
1034 void DownloadsDownloadFunction::OnStarted( 1033 void DownloadsDownloadFunction::OnStarted(
1035 const base::FilePath& creator_suggested_filename, 1034 const base::FilePath& creator_suggested_filename,
1036 downloads::FilenameConflictAction creator_conflict_action, 1035 downloads::FilenameConflictAction creator_conflict_action,
1037 DownloadItem* item, 1036 DownloadItem* item,
1038 content::DownloadInterruptReason interrupt_reason) { 1037 content::DownloadInterruptReason interrupt_reason) {
(...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after
1761 return; 1760 return;
1762 } 1761 }
1763 scoped_ptr<base::DictionaryValue> json_item( 1762 scoped_ptr<base::DictionaryValue> json_item(
1764 DownloadItemToJSON(download_item, profile_)); 1763 DownloadItemToJSON(download_item, profile_));
1765 DispatchEvent(events::DOWNLOADS_ON_CREATED, downloads::OnCreated::kEventName, 1764 DispatchEvent(events::DOWNLOADS_ON_CREATED, downloads::OnCreated::kEventName,
1766 true, Event::WillDispatchCallback(), json_item->DeepCopy()); 1765 true, Event::WillDispatchCallback(), json_item->DeepCopy());
1767 if (!ExtensionDownloadsEventRouterData::Get(download_item) && 1766 if (!ExtensionDownloadsEventRouterData::Get(download_item) &&
1768 (router->HasEventListener(downloads::OnChanged::kEventName) || 1767 (router->HasEventListener(downloads::OnChanged::kEventName) ||
1769 router->HasEventListener( 1768 router->HasEventListener(
1770 downloads::OnDeterminingFilename::kEventName))) { 1769 downloads::OnDeterminingFilename::kEventName))) {
1771 new ExtensionDownloadsEventRouterData(download_item, json_item.Pass()); 1770 new ExtensionDownloadsEventRouterData(download_item, std::move(json_item));
1772 } 1771 }
1773 } 1772 }
1774 1773
1775 void ExtensionDownloadsEventRouter::OnDownloadUpdated( 1774 void ExtensionDownloadsEventRouter::OnDownloadUpdated(
1776 DownloadManager* manager, DownloadItem* download_item) { 1775 DownloadManager* manager, DownloadItem* download_item) {
1777 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1776 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1778 EventRouter* router = EventRouter::Get(profile_); 1777 EventRouter* router = EventRouter::Get(profile_);
1779 ExtensionDownloadsEventRouterData* data = 1778 ExtensionDownloadsEventRouterData* data =
1780 ExtensionDownloadsEventRouterData::Get(download_item); 1779 ExtensionDownloadsEventRouterData::Get(download_item);
1781 if (download_item->IsTemporary() || 1780 if (download_item->IsTemporary() ||
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1830 1829
1831 // Update the OnChangedStat and dispatch the event if something significant 1830 // Update the OnChangedStat and dispatch the event if something significant
1832 // changed. Replace the stored json with the new json. 1831 // changed. Replace the stored json with the new json.
1833 data->OnItemUpdated(); 1832 data->OnItemUpdated();
1834 if (changed) { 1833 if (changed) {
1835 DispatchEvent(events::DOWNLOADS_ON_CHANGED, 1834 DispatchEvent(events::DOWNLOADS_ON_CHANGED,
1836 downloads::OnChanged::kEventName, true, 1835 downloads::OnChanged::kEventName, true,
1837 Event::WillDispatchCallback(), delta.release()); 1836 Event::WillDispatchCallback(), delta.release());
1838 data->OnChangedFired(); 1837 data->OnChangedFired();
1839 } 1838 }
1840 data->set_json(new_json.Pass()); 1839 data->set_json(std::move(new_json));
1841 } 1840 }
1842 1841
1843 void ExtensionDownloadsEventRouter::OnDownloadRemoved( 1842 void ExtensionDownloadsEventRouter::OnDownloadRemoved(
1844 DownloadManager* manager, DownloadItem* download_item) { 1843 DownloadManager* manager, DownloadItem* download_item) {
1845 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1844 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1846 if (download_item->IsTemporary()) 1845 if (download_item->IsTemporary())
1847 return; 1846 return;
1848 DispatchEvent( 1847 DispatchEvent(
1849 events::DOWNLOADS_ON_ERASED, downloads::OnErased::kEventName, true, 1848 events::DOWNLOADS_ON_ERASED, downloads::OnErased::kEventName, true,
1850 Event::WillDispatchCallback(), 1849 Event::WillDispatchCallback(),
1851 new base::FundamentalValue(static_cast<int>(download_item->GetId()))); 1850 new base::FundamentalValue(static_cast<int>(download_item->GetId())));
1852 } 1851 }
1853 1852
1854 void ExtensionDownloadsEventRouter::DispatchEvent( 1853 void ExtensionDownloadsEventRouter::DispatchEvent(
1855 events::HistogramValue histogram_value, 1854 events::HistogramValue histogram_value,
1856 const std::string& event_name, 1855 const std::string& event_name,
1857 bool include_incognito, 1856 bool include_incognito,
1858 const Event::WillDispatchCallback& will_dispatch_callback, 1857 const Event::WillDispatchCallback& will_dispatch_callback,
1859 base::Value* arg) { 1858 base::Value* arg) {
1860 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1859 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1861 if (!EventRouter::Get(profile_)) 1860 if (!EventRouter::Get(profile_))
1862 return; 1861 return;
1863 scoped_ptr<base::ListValue> args(new base::ListValue()); 1862 scoped_ptr<base::ListValue> args(new base::ListValue());
1864 args->Append(arg); 1863 args->Append(arg);
1865 std::string json_args; 1864 std::string json_args;
1866 base::JSONWriter::Write(*args, &json_args); 1865 base::JSONWriter::Write(*args, &json_args);
1867 scoped_ptr<Event> event(new Event(histogram_value, event_name, args.Pass())); 1866 scoped_ptr<Event> event(
1867 new Event(histogram_value, event_name, std::move(args)));
1868 // The downloads system wants to share on-record events with off-record 1868 // The downloads system wants to share on-record events with off-record
1869 // extension renderers even in incognito_split_mode because that's how 1869 // extension renderers even in incognito_split_mode because that's how
1870 // chrome://downloads works. The "restrict_to_profile" mechanism does not 1870 // chrome://downloads works. The "restrict_to_profile" mechanism does not
1871 // anticipate this, so it does not automatically prevent sharing off-record 1871 // anticipate this, so it does not automatically prevent sharing off-record
1872 // events with on-record extension renderers. 1872 // events with on-record extension renderers.
1873 event->restrict_to_browser_context = 1873 event->restrict_to_browser_context =
1874 (include_incognito && !profile_->IsOffTheRecord()) ? NULL : profile_; 1874 (include_incognito && !profile_->IsOffTheRecord()) ? NULL : profile_;
1875 event->will_dispatch_callback = will_dispatch_callback; 1875 event->will_dispatch_callback = will_dispatch_callback;
1876 EventRouter::Get(profile_)->BroadcastEvent(event.Pass()); 1876 EventRouter::Get(profile_)->BroadcastEvent(std::move(event));
1877 DownloadsNotificationSource notification_source; 1877 DownloadsNotificationSource notification_source;
1878 notification_source.event_name = event_name; 1878 notification_source.event_name = event_name;
1879 notification_source.profile = profile_; 1879 notification_source.profile = profile_;
1880 content::Source<DownloadsNotificationSource> content_source( 1880 content::Source<DownloadsNotificationSource> content_source(
1881 &notification_source); 1881 &notification_source);
1882 content::NotificationService::current()->Notify( 1882 content::NotificationService::current()->Notify(
1883 extensions::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT, 1883 extensions::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT,
1884 content_source, 1884 content_source,
1885 content::Details<std::string>(&json_args)); 1885 content::Details<std::string>(&json_args));
1886 } 1886 }
(...skipping 16 matching lines...) Expand all
1903 return; 1903 return;
1904 base::Time now(base::Time::Now()); 1904 base::Time now(base::Time::Now());
1905 int delta = now.ToTimeT() - last_checked_removal_.ToTimeT(); 1905 int delta = now.ToTimeT() - last_checked_removal_.ToTimeT();
1906 if (delta <= kFileExistenceRateLimitSeconds) 1906 if (delta <= kFileExistenceRateLimitSeconds)
1907 return; 1907 return;
1908 last_checked_removal_ = now; 1908 last_checked_removal_ = now;
1909 manager->CheckForHistoryFilesRemoval(); 1909 manager->CheckForHistoryFilesRemoval();
1910 } 1910 }
1911 1911
1912 } // namespace extensions 1912 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698