| 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/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 #include <memory> | 9 #include <memory> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 1591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1602 const FilenameChangedCallback& change) { | 1602 const FilenameChangedCallback& change) { |
| 1603 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1603 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1604 ExtensionDownloadsEventRouterData* data = | 1604 ExtensionDownloadsEventRouterData* data = |
| 1605 ExtensionDownloadsEventRouterData::Get(item); | 1605 ExtensionDownloadsEventRouterData::Get(item); |
| 1606 if (!data) { | 1606 if (!data) { |
| 1607 no_change.Run(); | 1607 no_change.Run(); |
| 1608 return; | 1608 return; |
| 1609 } | 1609 } |
| 1610 data->BeginFilenameDetermination(no_change, change); | 1610 data->BeginFilenameDetermination(no_change, change); |
| 1611 bool any_determiners = false; | 1611 bool any_determiners = false; |
| 1612 base::DictionaryValue* json = DownloadItemToJSON( | 1612 std::unique_ptr<base::DictionaryValue> json = |
| 1613 item, profile_).release(); | 1613 DownloadItemToJSON(item, profile_); |
| 1614 json->SetString(kFilenameKey, suggested_path.LossyDisplayName()); | 1614 json->SetString(kFilenameKey, suggested_path.LossyDisplayName()); |
| 1615 DispatchEvent(events::DOWNLOADS_ON_DETERMINING_FILENAME, | 1615 DispatchEvent(events::DOWNLOADS_ON_DETERMINING_FILENAME, |
| 1616 downloads::OnDeterminingFilename::kEventName, false, | 1616 downloads::OnDeterminingFilename::kEventName, false, |
| 1617 base::Bind(&OnDeterminingFilenameWillDispatchCallback, | 1617 base::Bind(&OnDeterminingFilenameWillDispatchCallback, |
| 1618 &any_determiners, data), | 1618 &any_determiners, data), |
| 1619 json); | 1619 std::move(json)); |
| 1620 if (!any_determiners) { | 1620 if (!any_determiners) { |
| 1621 data->ClearPendingDeterminers(); | 1621 data->ClearPendingDeterminers(); |
| 1622 if (!data->creator_suggested_filename().empty() || | 1622 if (!data->creator_suggested_filename().empty() || |
| 1623 (data->creator_conflict_action() != | 1623 (data->creator_conflict_action() != |
| 1624 downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY)) { | 1624 downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY)) { |
| 1625 change.Run(data->creator_suggested_filename(), | 1625 change.Run(data->creator_suggested_filename(), |
| 1626 ConvertConflictAction(data->creator_conflict_action())); | 1626 ConvertConflictAction(data->creator_conflict_action())); |
| 1627 // If all listeners are removed, don't keep |data| around. | 1627 // If all listeners are removed, don't keep |data| around. |
| 1628 data->ResetCreatorSuggestion(); | 1628 data->ResetCreatorSuggestion(); |
| 1629 } else { | 1629 } else { |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1770 if (!router || | 1770 if (!router || |
| 1771 (!router->HasEventListener(downloads::OnCreated::kEventName) && | 1771 (!router->HasEventListener(downloads::OnCreated::kEventName) && |
| 1772 !router->HasEventListener(downloads::OnChanged::kEventName) && | 1772 !router->HasEventListener(downloads::OnChanged::kEventName) && |
| 1773 !router->HasEventListener( | 1773 !router->HasEventListener( |
| 1774 downloads::OnDeterminingFilename::kEventName))) { | 1774 downloads::OnDeterminingFilename::kEventName))) { |
| 1775 return; | 1775 return; |
| 1776 } | 1776 } |
| 1777 std::unique_ptr<base::DictionaryValue> json_item( | 1777 std::unique_ptr<base::DictionaryValue> json_item( |
| 1778 DownloadItemToJSON(download_item, profile_)); | 1778 DownloadItemToJSON(download_item, profile_)); |
| 1779 DispatchEvent(events::DOWNLOADS_ON_CREATED, downloads::OnCreated::kEventName, | 1779 DispatchEvent(events::DOWNLOADS_ON_CREATED, downloads::OnCreated::kEventName, |
| 1780 true, Event::WillDispatchCallback(), json_item->DeepCopy()); | 1780 true, Event::WillDispatchCallback(), |
| 1781 json_item->CreateDeepCopy()); |
| 1781 if (!ExtensionDownloadsEventRouterData::Get(download_item) && | 1782 if (!ExtensionDownloadsEventRouterData::Get(download_item) && |
| 1782 (router->HasEventListener(downloads::OnChanged::kEventName) || | 1783 (router->HasEventListener(downloads::OnChanged::kEventName) || |
| 1783 router->HasEventListener( | 1784 router->HasEventListener( |
| 1784 downloads::OnDeterminingFilename::kEventName))) { | 1785 downloads::OnDeterminingFilename::kEventName))) { |
| 1785 new ExtensionDownloadsEventRouterData(download_item, std::move(json_item)); | 1786 new ExtensionDownloadsEventRouterData(download_item, std::move(json_item)); |
| 1786 } | 1787 } |
| 1787 } | 1788 } |
| 1788 | 1789 |
| 1789 void ExtensionDownloadsEventRouter::OnDownloadUpdated( | 1790 void ExtensionDownloadsEventRouter::OnDownloadUpdated( |
| 1790 DownloadManager* manager, DownloadItem* download_item) { | 1791 DownloadManager* manager, DownloadItem* download_item) { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1841 changed = true; | 1842 changed = true; |
| 1842 } | 1843 } |
| 1843 } | 1844 } |
| 1844 | 1845 |
| 1845 // Update the OnChangedStat and dispatch the event if something significant | 1846 // Update the OnChangedStat and dispatch the event if something significant |
| 1846 // changed. Replace the stored json with the new json. | 1847 // changed. Replace the stored json with the new json. |
| 1847 data->OnItemUpdated(); | 1848 data->OnItemUpdated(); |
| 1848 if (changed) { | 1849 if (changed) { |
| 1849 DispatchEvent(events::DOWNLOADS_ON_CHANGED, | 1850 DispatchEvent(events::DOWNLOADS_ON_CHANGED, |
| 1850 downloads::OnChanged::kEventName, true, | 1851 downloads::OnChanged::kEventName, true, |
| 1851 Event::WillDispatchCallback(), delta.release()); | 1852 Event::WillDispatchCallback(), std::move(delta)); |
| 1852 data->OnChangedFired(); | 1853 data->OnChangedFired(); |
| 1853 } | 1854 } |
| 1854 data->set_json(std::move(new_json)); | 1855 data->set_json(std::move(new_json)); |
| 1855 } | 1856 } |
| 1856 | 1857 |
| 1857 void ExtensionDownloadsEventRouter::OnDownloadRemoved( | 1858 void ExtensionDownloadsEventRouter::OnDownloadRemoved( |
| 1858 DownloadManager* manager, DownloadItem* download_item) { | 1859 DownloadManager* manager, DownloadItem* download_item) { |
| 1859 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1860 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1860 if (download_item->IsTemporary()) | 1861 if (download_item->IsTemporary()) |
| 1861 return; | 1862 return; |
| 1862 DispatchEvent( | 1863 DispatchEvent(events::DOWNLOADS_ON_ERASED, downloads::OnErased::kEventName, |
| 1863 events::DOWNLOADS_ON_ERASED, downloads::OnErased::kEventName, true, | 1864 true, Event::WillDispatchCallback(), |
| 1864 Event::WillDispatchCallback(), | 1865 base::MakeUnique<base::FundamentalValue>( |
| 1865 new base::FundamentalValue(static_cast<int>(download_item->GetId()))); | 1866 static_cast<int>(download_item->GetId()))); |
| 1866 } | 1867 } |
| 1867 | 1868 |
| 1868 void ExtensionDownloadsEventRouter::DispatchEvent( | 1869 void ExtensionDownloadsEventRouter::DispatchEvent( |
| 1869 events::HistogramValue histogram_value, | 1870 events::HistogramValue histogram_value, |
| 1870 const std::string& event_name, | 1871 const std::string& event_name, |
| 1871 bool include_incognito, | 1872 bool include_incognito, |
| 1872 const Event::WillDispatchCallback& will_dispatch_callback, | 1873 const Event::WillDispatchCallback& will_dispatch_callback, |
| 1873 base::Value* arg) { | 1874 std::unique_ptr<base::Value> arg) { |
| 1874 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1875 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1875 if (!EventRouter::Get(profile_)) | 1876 if (!EventRouter::Get(profile_)) |
| 1876 return; | 1877 return; |
| 1877 std::unique_ptr<base::ListValue> args(new base::ListValue()); | 1878 std::unique_ptr<base::ListValue> args(new base::ListValue()); |
| 1878 args->Append(arg); | 1879 args->Append(std::move(arg)); |
| 1879 std::string json_args; | 1880 std::string json_args; |
| 1880 base::JSONWriter::Write(*args, &json_args); | 1881 base::JSONWriter::Write(*args, &json_args); |
| 1881 std::unique_ptr<Event> event( | 1882 std::unique_ptr<Event> event( |
| 1882 new Event(histogram_value, event_name, std::move(args))); | 1883 new Event(histogram_value, event_name, std::move(args))); |
| 1883 // The downloads system wants to share on-record events with off-record | 1884 // The downloads system wants to share on-record events with off-record |
| 1884 // extension renderers even in incognito_split_mode because that's how | 1885 // extension renderers even in incognito_split_mode because that's how |
| 1885 // chrome://downloads works. The "restrict_to_profile" mechanism does not | 1886 // chrome://downloads works. The "restrict_to_profile" mechanism does not |
| 1886 // anticipate this, so it does not automatically prevent sharing off-record | 1887 // anticipate this, so it does not automatically prevent sharing off-record |
| 1887 // events with on-record extension renderers. | 1888 // events with on-record extension renderers. |
| 1888 event->restrict_to_browser_context = | 1889 event->restrict_to_browser_context = |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1918 return; | 1919 return; |
| 1919 base::Time now(base::Time::Now()); | 1920 base::Time now(base::Time::Now()); |
| 1920 int delta = now.ToTimeT() - last_checked_removal_.ToTimeT(); | 1921 int delta = now.ToTimeT() - last_checked_removal_.ToTimeT(); |
| 1921 if (delta <= kFileExistenceRateLimitSeconds) | 1922 if (delta <= kFileExistenceRateLimitSeconds) |
| 1922 return; | 1923 return; |
| 1923 last_checked_removal_ = now; | 1924 last_checked_removal_ = now; |
| 1924 manager->CheckForHistoryFilesRemoval(); | 1925 manager->CheckForHistoryFilesRemoval(); |
| 1925 } | 1926 } |
| 1926 | 1927 |
| 1927 } // namespace extensions | 1928 } // namespace extensions |
| OLD | NEW |