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

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

Issue 280853004: Use EventRouter::Get instead of ExtensionSystem::Get(browser_context)->event_router() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tweak header 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
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 <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 18 matching lines...) Expand all
29 #include "chrome/browser/chrome_notification_types.h" 29 #include "chrome/browser/chrome_notification_types.h"
30 #include "chrome/browser/download/download_danger_prompt.h" 30 #include "chrome/browser/download/download_danger_prompt.h"
31 #include "chrome/browser/download/download_file_icon_extractor.h" 31 #include "chrome/browser/download/download_file_icon_extractor.h"
32 #include "chrome/browser/download/download_prefs.h" 32 #include "chrome/browser/download/download_prefs.h"
33 #include "chrome/browser/download/download_query.h" 33 #include "chrome/browser/download/download_query.h"
34 #include "chrome/browser/download/download_service.h" 34 #include "chrome/browser/download/download_service.h"
35 #include "chrome/browser/download/download_service_factory.h" 35 #include "chrome/browser/download/download_service_factory.h"
36 #include "chrome/browser/download/download_shelf.h" 36 #include "chrome/browser/download/download_shelf.h"
37 #include "chrome/browser/download/download_stats.h" 37 #include "chrome/browser/download/download_stats.h"
38 #include "chrome/browser/download/drag_download_item.h" 38 #include "chrome/browser/download/drag_download_item.h"
39 #include "chrome/browser/extensions/extension_service.h"
40 #include "chrome/browser/extensions/extension_warning_service.h" 39 #include "chrome/browser/extensions/extension_warning_service.h"
41 #include "chrome/browser/icon_loader.h" 40 #include "chrome/browser/icon_loader.h"
42 #include "chrome/browser/icon_manager.h" 41 #include "chrome/browser/icon_manager.h"
43 #include "chrome/browser/platform_util.h" 42 #include "chrome/browser/platform_util.h"
44 #include "chrome/browser/profiles/profile.h" 43 #include "chrome/browser/profiles/profile.h"
45 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" 44 #include "chrome/browser/renderer_host/chrome_render_message_filter.h"
46 #include "chrome/browser/ui/browser.h" 45 #include "chrome/browser/ui/browser.h"
47 #include "chrome/browser/ui/browser_list.h" 46 #include "chrome/browser/ui/browser_list.h"
48 #include "chrome/browser/ui/browser_window.h" 47 #include "chrome/browser/ui/browser_window.h"
49 #include "chrome/common/extensions/api/downloads.h" 48 #include "chrome/common/extensions/api/downloads.h"
50 #include "components/web_modal/web_contents_modal_dialog_manager.h" 49 #include "components/web_modal/web_contents_modal_dialog_manager.h"
51 #include "content/public/browser/download_interrupt_reasons.h" 50 #include "content/public/browser/download_interrupt_reasons.h"
52 #include "content/public/browser/download_item.h" 51 #include "content/public/browser/download_item.h"
53 #include "content/public/browser/download_save_info.h" 52 #include "content/public/browser/download_save_info.h"
54 #include "content/public/browser/download_url_parameters.h" 53 #include "content/public/browser/download_url_parameters.h"
55 #include "content/public/browser/notification_details.h" 54 #include "content/public/browser/notification_details.h"
56 #include "content/public/browser/notification_service.h" 55 #include "content/public/browser/notification_service.h"
57 #include "content/public/browser/notification_source.h" 56 #include "content/public/browser/notification_source.h"
58 #include "content/public/browser/render_process_host.h" 57 #include "content/public/browser/render_process_host.h"
59 #include "content/public/browser/render_view_host.h" 58 #include "content/public/browser/render_view_host.h"
60 #include "content/public/browser/render_widget_host_view.h" 59 #include "content/public/browser/render_widget_host_view.h"
61 #include "content/public/browser/resource_context.h" 60 #include "content/public/browser/resource_context.h"
62 #include "content/public/browser/resource_dispatcher_host.h" 61 #include "content/public/browser/resource_dispatcher_host.h"
63 #include "content/public/browser/web_contents.h" 62 #include "content/public/browser/web_contents.h"
64 #include "extensions/browser/event_router.h" 63 #include "extensions/browser/event_router.h"
65 #include "extensions/browser/extension_function_dispatcher.h" 64 #include "extensions/browser/extension_function_dispatcher.h"
65 #include "extensions/browser/extension_prefs.h"
66 #include "extensions/browser/extension_registry.h" 66 #include "extensions/browser/extension_registry.h"
67 #include "extensions/browser/extension_system.h"
68 #include "net/base/filename_util.h" 67 #include "net/base/filename_util.h"
69 #include "net/base/load_flags.h" 68 #include "net/base/load_flags.h"
70 #include "net/http/http_util.h" 69 #include "net/http/http_util.h"
71 #include "third_party/skia/include/core/SkBitmap.h" 70 #include "third_party/skia/include/core/SkBitmap.h"
72 #include "ui/base/webui/web_ui_util.h" 71 #include "ui/base/webui/web_ui_util.h"
73 #include "ui/gfx/image/image_skia.h" 72 #include "ui/gfx/image/image_skia.h"
74 73
75 using content::BrowserContext; 74 using content::BrowserContext;
76 using content::BrowserThread; 75 using content::BrowserThread;
77 using content::DownloadItem; 76 using content::DownloadItem;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 const char kUserGesture[] = "User gesture required"; 108 const char kUserGesture[] = "User gesture required";
110 109
111 } // namespace download_extension_errors 110 } // namespace download_extension_errors
112 111
113 namespace errors = download_extension_errors; 112 namespace errors = download_extension_errors;
114 113
115 namespace extensions { 114 namespace extensions {
116 115
117 namespace { 116 namespace {
118 117
119 namespace downloads = extensions::api::downloads; 118 namespace downloads = api::downloads;
120 119
121 // Default icon size for getFileIcon() in pixels. 120 // Default icon size for getFileIcon() in pixels.
122 const int kDefaultIconSize = 32; 121 const int kDefaultIconSize = 32;
123 122
124 // Parameter keys 123 // Parameter keys
125 const char kByExtensionIdKey[] = "byExtensionId"; 124 const char kByExtensionIdKey[] = "byExtensionId";
126 const char kByExtensionNameKey[] = "byExtensionName"; 125 const char kByExtensionNameKey[] = "byExtensionName";
127 const char kBytesReceivedKey[] = "bytesReceived"; 126 const char kBytesReceivedKey[] = "bytesReceived";
128 const char kCanResumeKey[] = "canResume"; 127 const char kCanResumeKey[] = "canResume";
129 const char kDangerAccepted[] = "accepted"; 128 const char kDangerAccepted[] = "accepted";
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 base::Time now = base::Time::Now(); 272 base::Time now = base::Time::Now();
274 json->SetString(kEstimatedEndTimeKey, TimeToISO8601(now + time_remaining)); 273 json->SetString(kEstimatedEndTimeKey, TimeToISO8601(now + time_remaining));
275 } 274 }
276 DownloadedByExtension* by_ext = DownloadedByExtension::Get(download_item); 275 DownloadedByExtension* by_ext = DownloadedByExtension::Get(download_item);
277 if (by_ext) { 276 if (by_ext) {
278 json->SetString(kByExtensionIdKey, by_ext->id()); 277 json->SetString(kByExtensionIdKey, by_ext->id());
279 json->SetString(kByExtensionNameKey, by_ext->name()); 278 json->SetString(kByExtensionNameKey, by_ext->name());
280 // Lookup the extension's current name() in case the user changed their 279 // Lookup the extension's current name() in case the user changed their
281 // language. This won't work if the extension was uninstalled, so the name 280 // language. This won't work if the extension was uninstalled, so the name
282 // might be the wrong language. 281 // might be the wrong language.
283 bool include_disabled = true; 282 const Extension* extension =
284 const extensions::Extension* extension = extensions::ExtensionSystem::Get( 283 ExtensionRegistry::Get(profile)
285 profile)->extension_service()->GetExtensionById( 284 ->GetExtensionById(by_ext->id(), ExtensionRegistry::EVERYTHING);
286 by_ext->id(), include_disabled);
287 if (extension) 285 if (extension)
288 json->SetString(kByExtensionNameKey, extension->name()); 286 json->SetString(kByExtensionNameKey, extension->name());
289 } 287 }
290 // TODO(benjhayden): Implement fileSize. 288 // TODO(benjhayden): Implement fileSize.
291 json->SetDouble(kFileSizeKey, download_item->GetTotalBytes()); 289 json->SetDouble(kFileSizeKey, download_item->GetTotalBytes());
292 return scoped_ptr<base::DictionaryValue>(json); 290 return scoped_ptr<base::DictionaryValue>(json);
293 } 291 }
294 292
295 class DownloadFileIconExtractorImpl : public DownloadFileIconExtractor { 293 class DownloadFileIconExtractorImpl : public DownloadFileIconExtractor {
296 public: 294 public:
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 if (determiners_[index].extension_id == extension_id) { 728 if (determiners_[index].extension_id == extension_id) {
731 found_info = true; 729 found_info = true;
732 if (determiners_[index].reported) 730 if (determiners_[index].reported)
733 return false; 731 return false;
734 determiners_[index].reported = true; 732 determiners_[index].reported = true;
735 // Do not use filename if another determiner has already overridden the 733 // Do not use filename if another determiner has already overridden the
736 // filename and they take precedence. Extensions that were installed 734 // filename and they take precedence. Extensions that were installed
737 // later take precedence over previous extensions. 735 // later take precedence over previous extensions.
738 if (!filename.empty() || 736 if (!filename.empty() ||
739 (conflict_action != downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY)) { 737 (conflict_action != downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY)) {
740 extensions::ExtensionWarningSet warnings; 738 ExtensionWarningSet warnings;
741 std::string winner_extension_id; 739 std::string winner_extension_id;
742 ExtensionDownloadsEventRouter::DetermineFilenameInternal( 740 ExtensionDownloadsEventRouter::DetermineFilenameInternal(
743 filename, 741 filename,
744 conflict_action, 742 conflict_action,
745 determiners_[index].extension_id, 743 determiners_[index].extension_id,
746 determiners_[index].install_time, 744 determiners_[index].install_time,
747 determiner_.extension_id, 745 determiner_.extension_id,
748 determiner_.install_time, 746 determiner_.install_time,
749 &winner_extension_id, 747 &winner_extension_id,
750 &determined_filename_, 748 &determined_filename_,
751 &determined_conflict_action_, 749 &determined_conflict_action_,
752 &warnings); 750 &warnings);
753 if (!warnings.empty()) 751 if (!warnings.empty())
754 extensions::ExtensionWarningService::NotifyWarningsOnUI( 752 ExtensionWarningService::NotifyWarningsOnUI(profile, warnings);
755 profile, warnings);
756 if (winner_extension_id == determiners_[index].extension_id) 753 if (winner_extension_id == determiners_[index].extension_id)
757 determiner_ = determiners_[index]; 754 determiner_ = determiners_[index];
758 } 755 }
759 break; 756 break;
760 } 757 }
761 } 758 }
762 if (!found_info) 759 if (!found_info)
763 return false; 760 return false;
764 CheckAllDeterminersCalled(); 761 CheckAllDeterminersCalled();
765 return true; 762 return true;
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 DISALLOW_COPY_AND_ASSIGN(ManagerDestructionObserver); 916 DISALLOW_COPY_AND_ASSIGN(ManagerDestructionObserver);
920 }; 917 };
921 918
922 std::map<DownloadManager*, ManagerDestructionObserver*>* 919 std::map<DownloadManager*, ManagerDestructionObserver*>*
923 ManagerDestructionObserver::manager_file_existence_last_checked_ = NULL; 920 ManagerDestructionObserver::manager_file_existence_last_checked_ = NULL;
924 921
925 void OnDeterminingFilenameWillDispatchCallback( 922 void OnDeterminingFilenameWillDispatchCallback(
926 bool* any_determiners, 923 bool* any_determiners,
927 ExtensionDownloadsEventRouterData* data, 924 ExtensionDownloadsEventRouterData* data,
928 content::BrowserContext* context, 925 content::BrowserContext* context,
929 const extensions::Extension* extension, 926 const Extension* extension,
930 base::ListValue* event_args) { 927 base::ListValue* event_args) {
931 *any_determiners = true; 928 *any_determiners = true;
932 base::Time installed = 929 base::Time installed =
933 extensions::ExtensionPrefs::Get(context)->GetInstallTime(extension->id()); 930 ExtensionPrefs::Get(context)->GetInstallTime(extension->id());
934 data->AddPendingDeterminer(extension->id(), installed); 931 data->AddPendingDeterminer(extension->id(), installed);
935 } 932 }
936 933
937 bool Fault(bool error, 934 bool Fault(bool error,
938 const char* message_in, 935 const char* message_in,
939 std::string* message_out) { 936 std::string* message_out) {
940 if (!error) 937 if (!error)
941 return false; 938 return false;
942 *message_out = message_in; 939 *message_out = message_in;
943 return true; 940 return true;
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 1377
1381 bool DownloadsOpenFunction::RunSync() { 1378 bool DownloadsOpenFunction::RunSync() {
1382 scoped_ptr<downloads::Open::Params> params( 1379 scoped_ptr<downloads::Open::Params> params(
1383 downloads::Open::Params::Create(*args_)); 1380 downloads::Open::Params::Create(*args_));
1384 EXTENSION_FUNCTION_VALIDATE(params.get()); 1381 EXTENSION_FUNCTION_VALIDATE(params.get());
1385 DownloadItem* download_item = 1382 DownloadItem* download_item =
1386 GetDownload(GetProfile(), include_incognito(), params->download_id); 1383 GetDownload(GetProfile(), include_incognito(), params->download_id);
1387 if (InvalidId(download_item, &error_) || 1384 if (InvalidId(download_item, &error_) ||
1388 Fault(!user_gesture(), errors::kUserGesture, &error_) || 1385 Fault(!user_gesture(), errors::kUserGesture, &error_) ||
1389 Fault(download_item->GetState() != DownloadItem::COMPLETE, 1386 Fault(download_item->GetState() != DownloadItem::COMPLETE,
1390 errors::kNotComplete, &error_) || 1387 errors::kNotComplete,
1391 Fault(!GetExtension()->HasAPIPermission( 1388 &error_) ||
1392 extensions::APIPermission::kDownloadsOpen), 1389 Fault(!GetExtension()->HasAPIPermission(APIPermission::kDownloadsOpen),
1393 errors::kOpenPermission, &error_)) 1390 errors::kOpenPermission,
1391 &error_))
1394 return false; 1392 return false;
1395 download_item->OpenDownload(); 1393 download_item->OpenDownload();
1396 RecordApiFunctions(DOWNLOADS_FUNCTION_OPEN); 1394 RecordApiFunctions(DOWNLOADS_FUNCTION_OPEN);
1397 return true; 1395 return true;
1398 } 1396 }
1399 1397
1400 DownloadsDragFunction::DownloadsDragFunction() {} 1398 DownloadsDragFunction::DownloadsDragFunction() {}
1401 1399
1402 DownloadsDragFunction::~DownloadsDragFunction() {} 1400 DownloadsDragFunction::~DownloadsDragFunction() {}
1403 1401
(...skipping 22 matching lines...) Expand all
1426 } 1424 }
1427 1425
1428 DownloadsSetShelfEnabledFunction::DownloadsSetShelfEnabledFunction() {} 1426 DownloadsSetShelfEnabledFunction::DownloadsSetShelfEnabledFunction() {}
1429 1427
1430 DownloadsSetShelfEnabledFunction::~DownloadsSetShelfEnabledFunction() {} 1428 DownloadsSetShelfEnabledFunction::~DownloadsSetShelfEnabledFunction() {}
1431 1429
1432 bool DownloadsSetShelfEnabledFunction::RunSync() { 1430 bool DownloadsSetShelfEnabledFunction::RunSync() {
1433 scoped_ptr<downloads::SetShelfEnabled::Params> params( 1431 scoped_ptr<downloads::SetShelfEnabled::Params> params(
1434 downloads::SetShelfEnabled::Params::Create(*args_)); 1432 downloads::SetShelfEnabled::Params::Create(*args_));
1435 EXTENSION_FUNCTION_VALIDATE(params.get()); 1433 EXTENSION_FUNCTION_VALIDATE(params.get());
1436 if (!GetExtension()->HasAPIPermission( 1434 if (!GetExtension()->HasAPIPermission(APIPermission::kDownloadsShelf)) {
1437 extensions::APIPermission::kDownloadsShelf)) {
1438 error_ = download_extension_errors::kShelfPermission; 1435 error_ = download_extension_errors::kShelfPermission;
1439 return false; 1436 return false;
1440 } 1437 }
1441 1438
1442 RecordApiFunctions(DOWNLOADS_FUNCTION_SET_SHELF_ENABLED); 1439 RecordApiFunctions(DOWNLOADS_FUNCTION_SET_SHELF_ENABLED);
1443 DownloadManager* manager = NULL; 1440 DownloadManager* manager = NULL;
1444 DownloadManager* incognito_manager = NULL; 1441 DownloadManager* incognito_manager = NULL;
1445 GetManagers(GetProfile(), include_incognito(), &manager, &incognito_manager); 1442 GetManagers(GetProfile(), include_incognito(), &manager, &incognito_manager);
1446 DownloadService* service = NULL; 1443 DownloadService* service = NULL;
1447 DownloadService* incognito_service = NULL; 1444 DownloadService* incognito_service = NULL;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1542 } 1539 }
1543 1540
1544 ExtensionDownloadsEventRouter::ExtensionDownloadsEventRouter( 1541 ExtensionDownloadsEventRouter::ExtensionDownloadsEventRouter(
1545 Profile* profile, 1542 Profile* profile,
1546 DownloadManager* manager) 1543 DownloadManager* manager)
1547 : profile_(profile), 1544 : profile_(profile),
1548 notifier_(manager, this), 1545 notifier_(manager, this),
1549 extension_registry_observer_(this) { 1546 extension_registry_observer_(this) {
1550 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1547 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1551 DCHECK(profile_); 1548 DCHECK(profile_);
1552 extension_registry_observer_.Add( 1549 extension_registry_observer_.Add(ExtensionRegistry::Get(profile_));
1553 extensions::ExtensionRegistry::Get(profile_)); 1550 EventRouter* router = EventRouter::Get(profile_);
1554 extensions::EventRouter* router = extensions::EventRouter::Get(profile_);
1555 if (router) 1551 if (router)
1556 router->RegisterObserver(this, 1552 router->RegisterObserver(this,
1557 downloads::OnDeterminingFilename::kEventName); 1553 downloads::OnDeterminingFilename::kEventName);
1558 } 1554 }
1559 1555
1560 ExtensionDownloadsEventRouter::~ExtensionDownloadsEventRouter() { 1556 ExtensionDownloadsEventRouter::~ExtensionDownloadsEventRouter() {
1561 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1557 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1562 extensions::EventRouter* router = extensions::EventRouter::Get(profile_); 1558 EventRouter* router = EventRouter::Get(profile_);
1563 if (router) 1559 if (router)
1564 router->UnregisterObserver(this); 1560 router->UnregisterObserver(this);
1565 } 1561 }
1566 1562
1567 void ExtensionDownloadsEventRouter:: 1563 void ExtensionDownloadsEventRouter::
1568 SetDetermineFilenameTimeoutSecondsForTesting(int s) { 1564 SetDetermineFilenameTimeoutSecondsForTesting(int s) {
1569 ExtensionDownloadsEventRouterData:: 1565 ExtensionDownloadsEventRouterData::
1570 SetDetermineFilenameTimeoutSecondsForTesting(s); 1566 SetDetermineFilenameTimeoutSecondsForTesting(s);
1571 } 1567 }
1572 1568
1573 void ExtensionDownloadsEventRouter::SetShelfEnabled( 1569 void ExtensionDownloadsEventRouter::SetShelfEnabled(const Extension* extension,
1574 const extensions::Extension* extension, bool enabled) { 1570 bool enabled) {
1575 std::set<const extensions::Extension*>::iterator iter = 1571 std::set<const Extension*>::iterator iter =
1576 shelf_disabling_extensions_.find(extension); 1572 shelf_disabling_extensions_.find(extension);
1577 if (iter == shelf_disabling_extensions_.end()) { 1573 if (iter == shelf_disabling_extensions_.end()) {
1578 if (!enabled) 1574 if (!enabled)
1579 shelf_disabling_extensions_.insert(extension); 1575 shelf_disabling_extensions_.insert(extension);
1580 } else if (enabled) { 1576 } else if (enabled) {
1581 shelf_disabling_extensions_.erase(extension); 1577 shelf_disabling_extensions_.erase(extension);
1582 } 1578 }
1583 } 1579 }
1584 1580
1585 bool ExtensionDownloadsEventRouter::IsShelfEnabled() const { 1581 bool ExtensionDownloadsEventRouter::IsShelfEnabled() const {
1586 return shelf_disabling_extensions_.empty(); 1582 return shelf_disabling_extensions_.empty();
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1650 1646
1651 void ExtensionDownloadsEventRouter::DetermineFilenameInternal( 1647 void ExtensionDownloadsEventRouter::DetermineFilenameInternal(
1652 const base::FilePath& filename, 1648 const base::FilePath& filename,
1653 downloads::FilenameConflictAction conflict_action, 1649 downloads::FilenameConflictAction conflict_action,
1654 const std::string& suggesting_extension_id, 1650 const std::string& suggesting_extension_id,
1655 const base::Time& suggesting_install_time, 1651 const base::Time& suggesting_install_time,
1656 const std::string& incumbent_extension_id, 1652 const std::string& incumbent_extension_id,
1657 const base::Time& incumbent_install_time, 1653 const base::Time& incumbent_install_time,
1658 std::string* winner_extension_id, 1654 std::string* winner_extension_id,
1659 base::FilePath* determined_filename, 1655 base::FilePath* determined_filename,
1660 downloads::FilenameConflictAction* 1656 downloads::FilenameConflictAction* determined_conflict_action,
1661 determined_conflict_action, 1657 ExtensionWarningSet* warnings) {
1662 extensions::ExtensionWarningSet* warnings) {
1663 DCHECK(!filename.empty() || 1658 DCHECK(!filename.empty() ||
1664 (conflict_action != downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY)); 1659 (conflict_action != downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY));
1665 DCHECK(!suggesting_extension_id.empty()); 1660 DCHECK(!suggesting_extension_id.empty());
1666 1661
1667 if (incumbent_extension_id.empty()) { 1662 if (incumbent_extension_id.empty()) {
1668 *winner_extension_id = suggesting_extension_id; 1663 *winner_extension_id = suggesting_extension_id;
1669 *determined_filename = filename; 1664 *determined_filename = filename;
1670 *determined_conflict_action = conflict_action; 1665 *determined_conflict_action = conflict_action;
1671 return; 1666 return;
1672 } 1667 }
1673 1668
1674 if (suggesting_install_time < incumbent_install_time) { 1669 if (suggesting_install_time < incumbent_install_time) {
1675 *winner_extension_id = incumbent_extension_id; 1670 *winner_extension_id = incumbent_extension_id;
1676 warnings->insert( 1671 warnings->insert(ExtensionWarning::CreateDownloadFilenameConflictWarning(
1677 extensions::ExtensionWarning::CreateDownloadFilenameConflictWarning( 1672 suggesting_extension_id,
1678 suggesting_extension_id, 1673 incumbent_extension_id,
1679 incumbent_extension_id, 1674 filename,
1680 filename, 1675 *determined_filename));
1681 *determined_filename));
1682 return; 1676 return;
1683 } 1677 }
1684 1678
1685 *winner_extension_id = suggesting_extension_id; 1679 *winner_extension_id = suggesting_extension_id;
1686 warnings->insert( 1680 warnings->insert(ExtensionWarning::CreateDownloadFilenameConflictWarning(
1687 extensions::ExtensionWarning::CreateDownloadFilenameConflictWarning( 1681 incumbent_extension_id,
1688 incumbent_extension_id, 1682 suggesting_extension_id,
1689 suggesting_extension_id, 1683 *determined_filename,
1690 *determined_filename, 1684 filename));
1691 filename));
1692 *determined_filename = filename; 1685 *determined_filename = filename;
1693 *determined_conflict_action = conflict_action; 1686 *determined_conflict_action = conflict_action;
1694 } 1687 }
1695 1688
1696 bool ExtensionDownloadsEventRouter::DetermineFilename( 1689 bool ExtensionDownloadsEventRouter::DetermineFilename(
1697 Profile* profile, 1690 Profile* profile,
1698 bool include_incognito, 1691 bool include_incognito,
1699 const std::string& ext_id, 1692 const std::string& ext_id,
1700 int download_id, 1693 int download_id,
1701 const base::FilePath& const_filename, 1694 const base::FilePath& const_filename,
(...skipping 28 matching lines...) Expand all
1730 if (Fault(!data->DeterminerCallback( 1723 if (Fault(!data->DeterminerCallback(
1731 profile, ext_id, filename, conflict_action), 1724 profile, ext_id, filename, conflict_action),
1732 errors::kUnexpectedDeterminer, error) || 1725 errors::kUnexpectedDeterminer, error) ||
1733 Fault((!const_filename.empty() && !valid_filename), 1726 Fault((!const_filename.empty() && !valid_filename),
1734 errors::kInvalidFilename, error)) 1727 errors::kInvalidFilename, error))
1735 return false; 1728 return false;
1736 return true; 1729 return true;
1737 } 1730 }
1738 1731
1739 void ExtensionDownloadsEventRouter::OnListenerRemoved( 1732 void ExtensionDownloadsEventRouter::OnListenerRemoved(
1740 const extensions::EventListenerInfo& details) { 1733 const EventListenerInfo& details) {
1741 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1734 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1742 DownloadManager* manager = notifier_.GetManager(); 1735 DownloadManager* manager = notifier_.GetManager();
1743 if (!manager) 1736 if (!manager)
1744 return; 1737 return;
1745 bool determiner_removed = ( 1738 bool determiner_removed = (
1746 details.event_name == downloads::OnDeterminingFilename::kEventName); 1739 details.event_name == downloads::OnDeterminingFilename::kEventName);
1747 extensions::EventRouter* router = extensions::ExtensionSystem::Get(profile_)-> 1740 EventRouter* router = EventRouter::Get(profile_);
1748 event_router();
1749 bool any_listeners = 1741 bool any_listeners =
1750 router->HasEventListener(downloads::OnChanged::kEventName) || 1742 router->HasEventListener(downloads::OnChanged::kEventName) ||
1751 router->HasEventListener(downloads::OnDeterminingFilename::kEventName); 1743 router->HasEventListener(downloads::OnDeterminingFilename::kEventName);
1752 if (!determiner_removed && any_listeners) 1744 if (!determiner_removed && any_listeners)
1753 return; 1745 return;
1754 DownloadManager::DownloadVector items; 1746 DownloadManager::DownloadVector items;
1755 manager->GetAllDownloads(&items); 1747 manager->GetAllDownloads(&items);
1756 for (DownloadManager::DownloadVector::const_iterator iter = 1748 for (DownloadManager::DownloadVector::const_iterator iter =
1757 items.begin(); 1749 items.begin();
1758 iter != items.end(); ++iter) { 1750 iter != items.end(); ++iter) {
(...skipping 18 matching lines...) Expand all
1777 1769
1778 // That's all the methods that have to do with filename determination. The rest 1770 // That's all the methods that have to do with filename determination. The rest
1779 // have to do with the other, less special events. 1771 // have to do with the other, less special events.
1780 1772
1781 void ExtensionDownloadsEventRouter::OnDownloadCreated( 1773 void ExtensionDownloadsEventRouter::OnDownloadCreated(
1782 DownloadManager* manager, DownloadItem* download_item) { 1774 DownloadManager* manager, DownloadItem* download_item) {
1783 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1775 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1784 if (download_item->IsTemporary()) 1776 if (download_item->IsTemporary())
1785 return; 1777 return;
1786 1778
1787 extensions::EventRouter* router = extensions::ExtensionSystem::Get(profile_)-> 1779 EventRouter* router = EventRouter::Get(profile_);
1788 event_router();
1789 // Avoid allocating a bunch of memory in DownloadItemToJSON if it isn't going 1780 // Avoid allocating a bunch of memory in DownloadItemToJSON if it isn't going
1790 // to be used. 1781 // to be used.
1791 if (!router || 1782 if (!router ||
1792 (!router->HasEventListener(downloads::OnCreated::kEventName) && 1783 (!router->HasEventListener(downloads::OnCreated::kEventName) &&
1793 !router->HasEventListener(downloads::OnChanged::kEventName) && 1784 !router->HasEventListener(downloads::OnChanged::kEventName) &&
1794 !router->HasEventListener( 1785 !router->HasEventListener(
1795 downloads::OnDeterminingFilename::kEventName))) { 1786 downloads::OnDeterminingFilename::kEventName))) {
1796 return; 1787 return;
1797 } 1788 }
1798 scoped_ptr<base::DictionaryValue> json_item( 1789 scoped_ptr<base::DictionaryValue> json_item(
1799 DownloadItemToJSON(download_item, profile_)); 1790 DownloadItemToJSON(download_item, profile_));
1800 DispatchEvent(downloads::OnCreated::kEventName, 1791 DispatchEvent(downloads::OnCreated::kEventName,
1801 true, 1792 true,
1802 extensions::Event::WillDispatchCallback(), 1793 Event::WillDispatchCallback(),
1803 json_item->DeepCopy()); 1794 json_item->DeepCopy());
1804 if (!ExtensionDownloadsEventRouterData::Get(download_item) && 1795 if (!ExtensionDownloadsEventRouterData::Get(download_item) &&
1805 (router->HasEventListener(downloads::OnChanged::kEventName) || 1796 (router->HasEventListener(downloads::OnChanged::kEventName) ||
1806 router->HasEventListener( 1797 router->HasEventListener(
1807 downloads::OnDeterminingFilename::kEventName))) { 1798 downloads::OnDeterminingFilename::kEventName))) {
1808 new ExtensionDownloadsEventRouterData(download_item, json_item.Pass()); 1799 new ExtensionDownloadsEventRouterData(download_item, json_item.Pass());
1809 } 1800 }
1810 } 1801 }
1811 1802
1812 void ExtensionDownloadsEventRouter::OnDownloadUpdated( 1803 void ExtensionDownloadsEventRouter::OnDownloadUpdated(
1813 DownloadManager* manager, DownloadItem* download_item) { 1804 DownloadManager* manager, DownloadItem* download_item) {
1814 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1805 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1815 extensions::EventRouter* router = extensions::ExtensionSystem::Get(profile_)-> 1806 EventRouter* router = EventRouter::Get(profile_);
1816 event_router();
1817 ExtensionDownloadsEventRouterData* data = 1807 ExtensionDownloadsEventRouterData* data =
1818 ExtensionDownloadsEventRouterData::Get(download_item); 1808 ExtensionDownloadsEventRouterData::Get(download_item);
1819 if (download_item->IsTemporary() || 1809 if (download_item->IsTemporary() ||
1820 !router->HasEventListener(downloads::OnChanged::kEventName)) { 1810 !router->HasEventListener(downloads::OnChanged::kEventName)) {
1821 return; 1811 return;
1822 } 1812 }
1823 if (!data) { 1813 if (!data) {
1824 // The download_item probably transitioned from temporary to not temporary, 1814 // The download_item probably transitioned from temporary to not temporary,
1825 // or else an event listener was added. 1815 // or else an event listener was added.
1826 data = new ExtensionDownloadsEventRouterData( 1816 data = new ExtensionDownloadsEventRouterData(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1865 changed = true; 1855 changed = true;
1866 } 1856 }
1867 } 1857 }
1868 1858
1869 // Update the OnChangedStat and dispatch the event if something significant 1859 // Update the OnChangedStat and dispatch the event if something significant
1870 // changed. Replace the stored json with the new json. 1860 // changed. Replace the stored json with the new json.
1871 data->OnItemUpdated(); 1861 data->OnItemUpdated();
1872 if (changed) { 1862 if (changed) {
1873 DispatchEvent(downloads::OnChanged::kEventName, 1863 DispatchEvent(downloads::OnChanged::kEventName,
1874 true, 1864 true,
1875 extensions::Event::WillDispatchCallback(), 1865 Event::WillDispatchCallback(),
1876 delta.release()); 1866 delta.release());
1877 data->OnChangedFired(); 1867 data->OnChangedFired();
1878 } 1868 }
1879 data->set_json(new_json.Pass()); 1869 data->set_json(new_json.Pass());
1880 } 1870 }
1881 1871
1882 void ExtensionDownloadsEventRouter::OnDownloadRemoved( 1872 void ExtensionDownloadsEventRouter::OnDownloadRemoved(
1883 DownloadManager* manager, DownloadItem* download_item) { 1873 DownloadManager* manager, DownloadItem* download_item) {
1884 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1874 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1885 if (download_item->IsTemporary()) 1875 if (download_item->IsTemporary())
1886 return; 1876 return;
1887 DispatchEvent(downloads::OnErased::kEventName, 1877 DispatchEvent(
1888 true, 1878 downloads::OnErased::kEventName,
1889 extensions::Event::WillDispatchCallback(), 1879 true,
1890 new base::FundamentalValue( 1880 Event::WillDispatchCallback(),
1891 static_cast<int>(download_item->GetId()))); 1881 new base::FundamentalValue(static_cast<int>(download_item->GetId())));
1892 } 1882 }
1893 1883
1894 void ExtensionDownloadsEventRouter::DispatchEvent( 1884 void ExtensionDownloadsEventRouter::DispatchEvent(
1895 const std::string& event_name, 1885 const std::string& event_name,
1896 bool include_incognito, 1886 bool include_incognito,
1897 const extensions::Event::WillDispatchCallback& will_dispatch_callback, 1887 const Event::WillDispatchCallback& will_dispatch_callback,
1898 base::Value* arg) { 1888 base::Value* arg) {
1899 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1889 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1900 if (!extensions::EventRouter::Get(profile_)) 1890 if (!EventRouter::Get(profile_))
1901 return; 1891 return;
1902 scoped_ptr<base::ListValue> args(new base::ListValue()); 1892 scoped_ptr<base::ListValue> args(new base::ListValue());
1903 args->Append(arg); 1893 args->Append(arg);
1904 std::string json_args; 1894 std::string json_args;
1905 base::JSONWriter::Write(args.get(), &json_args); 1895 base::JSONWriter::Write(args.get(), &json_args);
1906 scoped_ptr<extensions::Event> event(new extensions::Event( 1896 scoped_ptr<Event> event(new Event(event_name, args.Pass()));
1907 event_name, args.Pass()));
1908 // The downloads system wants to share on-record events with off-record 1897 // The downloads system wants to share on-record events with off-record
1909 // extension renderers even in incognito_split_mode because that's how 1898 // extension renderers even in incognito_split_mode because that's how
1910 // chrome://downloads works. The "restrict_to_profile" mechanism does not 1899 // chrome://downloads works. The "restrict_to_profile" mechanism does not
1911 // anticipate this, so it does not automatically prevent sharing off-record 1900 // anticipate this, so it does not automatically prevent sharing off-record
1912 // events with on-record extension renderers. 1901 // events with on-record extension renderers.
1913 event->restrict_to_browser_context = 1902 event->restrict_to_browser_context =
1914 (include_incognito && !profile_->IsOffTheRecord()) ? NULL : profile_; 1903 (include_incognito && !profile_->IsOffTheRecord()) ? NULL : profile_;
1915 event->will_dispatch_callback = will_dispatch_callback; 1904 event->will_dispatch_callback = will_dispatch_callback;
1916 extensions::EventRouter::Get(profile_)->BroadcastEvent(event.Pass()); 1905 EventRouter::Get(profile_)->BroadcastEvent(event.Pass());
1917 DownloadsNotificationSource notification_source; 1906 DownloadsNotificationSource notification_source;
1918 notification_source.event_name = event_name; 1907 notification_source.event_name = event_name;
1919 notification_source.profile = profile_; 1908 notification_source.profile = profile_;
1920 content::Source<DownloadsNotificationSource> content_source( 1909 content::Source<DownloadsNotificationSource> content_source(
1921 &notification_source); 1910 &notification_source);
1922 content::NotificationService::current()->Notify( 1911 content::NotificationService::current()->Notify(
1923 chrome::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT, 1912 chrome::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT,
1924 content_source, 1913 content_source,
1925 content::Details<std::string>(&json_args)); 1914 content::Details<std::string>(&json_args));
1926 } 1915 }
1927 1916
1928 void ExtensionDownloadsEventRouter::OnExtensionUnloaded( 1917 void ExtensionDownloadsEventRouter::OnExtensionUnloaded(
1929 content::BrowserContext* browser_context, 1918 content::BrowserContext* browser_context,
1930 const extensions::Extension* extension, 1919 const Extension* extension,
1931 extensions::UnloadedExtensionInfo::Reason reason) { 1920 UnloadedExtensionInfo::Reason reason) {
1932 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1921 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1933 std::set<const extensions::Extension*>::iterator iter = 1922 std::set<const Extension*>::iterator iter =
1934 shelf_disabling_extensions_.find(extension); 1923 shelf_disabling_extensions_.find(extension);
1935 if (iter != shelf_disabling_extensions_.end()) 1924 if (iter != shelf_disabling_extensions_.end())
1936 shelf_disabling_extensions_.erase(iter); 1925 shelf_disabling_extensions_.erase(iter);
1937 } 1926 }
1938 1927
1939 } // namespace extensions 1928 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698