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

Side by Side Diff: chrome/browser/download/download_extension_api.cc

Issue 9425014: Fix most of the downloads api in incognito profiles (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: style Created 8 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 | Annotate | Revision Log
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/download/download_extension_api.h" 5 #include "chrome/browser/download/download_extension_api.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cctype> 8 #include <cctype>
9 #include <iterator> 9 #include <iterator>
10 #include <set> 10 #include <set>
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 const char kEndTimeKey[] = "endTime"; 86 const char kEndTimeKey[] = "endTime";
87 const char kErrorKey[] = "error"; 87 const char kErrorKey[] = "error";
88 const char kFileSizeKey[] = "fileSize"; 88 const char kFileSizeKey[] = "fileSize";
89 const char kFilenameKey[] = "filename"; 89 const char kFilenameKey[] = "filename";
90 const char kFilenameRegexKey[] = "filenameRegex"; 90 const char kFilenameRegexKey[] = "filenameRegex";
91 const char kHeaderNameKey[] = "name"; 91 const char kHeaderNameKey[] = "name";
92 const char kHeaderValueKey[] = "value"; 92 const char kHeaderValueKey[] = "value";
93 const char kHeaderBinaryValueKey[] = "binaryValue"; 93 const char kHeaderBinaryValueKey[] = "binaryValue";
94 const char kHeadersKey[] = "headers"; 94 const char kHeadersKey[] = "headers";
95 const char kIdKey[] = "id"; 95 const char kIdKey[] = "id";
96 const char kIncognito[] = "incognito";
96 const char kLimitKey[] = "limit"; 97 const char kLimitKey[] = "limit";
97 const char kMethodKey[] = "method"; 98 const char kMethodKey[] = "method";
98 const char kMimeKey[] = "mime"; 99 const char kMimeKey[] = "mime";
99 const char kOrderByKey[] = "orderBy"; 100 const char kOrderByKey[] = "orderBy";
100 const char kPausedKey[] = "paused"; 101 const char kPausedKey[] = "paused";
101 const char kQueryKey[] = "query"; 102 const char kQueryKey[] = "query";
102 const char kSaveAsKey[] = "saveAs"; 103 const char kSaveAsKey[] = "saveAs";
103 const char kSizeKey[] = "size"; 104 const char kSizeKey[] = "size";
104 const char kStartTimeKey[] = "startTime"; 105 const char kStartTimeKey[] = "startTime";
105 const char kStartedAfterKey[] = "startedAfter"; 106 const char kStartedAfterKey[] = "startedAfter";
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 if (item->GetDangerType() != content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS) 190 if (item->GetDangerType() != content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS)
190 json->SetBoolean(kDangerAcceptedKey, 191 json->SetBoolean(kDangerAcceptedKey,
191 item->GetSafetyState() == DownloadItem::DANGEROUS_BUT_VALIDATED); 192 item->GetSafetyState() == DownloadItem::DANGEROUS_BUT_VALIDATED);
192 json->SetString(kStateKey, StateString(item->GetState())); 193 json->SetString(kStateKey, StateString(item->GetState()));
193 json->SetBoolean(kPausedKey, item->IsPaused()); 194 json->SetBoolean(kPausedKey, item->IsPaused());
194 json->SetString(kMimeKey, item->GetMimeType()); 195 json->SetString(kMimeKey, item->GetMimeType());
195 json->SetInteger(kStartTimeKey, 196 json->SetInteger(kStartTimeKey,
196 (item->GetStartTime() - base::Time::UnixEpoch()).InMilliseconds()); 197 (item->GetStartTime() - base::Time::UnixEpoch()).InMilliseconds());
197 json->SetInteger(kBytesReceivedKey, item->GetReceivedBytes()); 198 json->SetInteger(kBytesReceivedKey, item->GetReceivedBytes());
198 json->SetInteger(kTotalBytesKey, item->GetTotalBytes()); 199 json->SetInteger(kTotalBytesKey, item->GetTotalBytes());
200 json->SetBoolean(kIncognito, item->IsOtr());
199 if (item->GetState() == DownloadItem::INTERRUPTED) { 201 if (item->GetState() == DownloadItem::INTERRUPTED) {
200 json->SetInteger(kErrorKey, static_cast<int>(item->GetLastReason())); 202 json->SetInteger(kErrorKey, static_cast<int>(item->GetLastReason()));
201 } else if (item->GetState() == DownloadItem::CANCELLED) { 203 } else if (item->GetState() == DownloadItem::CANCELLED) {
202 json->SetInteger(kErrorKey, static_cast<int>( 204 json->SetInteger(kErrorKey, static_cast<int>(
203 content::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED)); 205 content::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED));
204 } 206 }
205 // TODO(benjhayden): Implement endTime and fileSize. 207 // TODO(benjhayden): Implement endTime and fileSize.
206 // json->SetInteger(kEndTimeKey, -1); 208 // json->SetInteger(kEndTimeKey, -1);
207 json->SetInteger(kFileSizeKey, item->GetTotalBytes()); 209 json->SetInteger(kFileSizeKey, item->GetTotalBytes());
208 return scoped_ptr<base::DictionaryValue>(json); 210 return scoped_ptr<base::DictionaryValue>(json);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 sorter_types[kStartTimeKey] = DownloadQuery::SORT_START_TIME; 302 sorter_types[kStartTimeKey] = DownloadQuery::SORT_START_TIME;
301 sorter_types[kStateKey] = DownloadQuery::SORT_STATE; 303 sorter_types[kStateKey] = DownloadQuery::SORT_STATE;
302 sorter_types[kTotalBytesKey] = DownloadQuery::SORT_TOTAL_BYTES; 304 sorter_types[kTotalBytesKey] = DownloadQuery::SORT_TOTAL_BYTES;
303 sorter_types[kUrlKey] = DownloadQuery::SORT_URL; 305 sorter_types[kUrlKey] = DownloadQuery::SORT_URL;
304 } 306 }
305 307
306 bool IsNotTemporaryDownloadFilter(const DownloadItem& item) { 308 bool IsNotTemporaryDownloadFilter(const DownloadItem& item) {
307 return !item.IsTemporary(); 309 return !item.IsTemporary();
308 } 310 }
309 311
312 void GetManagers(
313 Profile* profile,
314 bool include_incognito,
315 DownloadManager** manager, DownloadManager** incognito_manager) {
316 *manager = DownloadServiceFactory::GetForProfile(profile)->
317 GetDownloadManager();
318 *incognito_manager = NULL;
319 if (include_incognito && profile->HasOffTheRecordProfile())
320 *incognito_manager = DownloadServiceFactory::GetForProfile(profile->
321 GetOffTheRecordProfile())->GetDownloadManager();
322 }
323
324 DownloadItem* GetActiveItemInternal(
325 Profile* profile,
326 bool include_incognito,
327 int id) {
328 DownloadManager* manager = NULL;
329 DownloadManager* incognito_manager = NULL;
330 GetManagers(profile, include_incognito, &manager, &incognito_manager);
331 DownloadItem* download_item = manager->GetActiveDownloadItem(id);
332 if (!download_item && incognito_manager)
333 download_item = incognito_manager->GetActiveDownloadItem(id);
334 return download_item;
335 }
336
310 } // namespace 337 } // namespace
311 338
312 bool DownloadsFunctionInterface::RunImplImpl( 339 bool DownloadsFunctionInterface::RunImplImpl(
313 DownloadsFunctionInterface* pimpl) { 340 DownloadsFunctionInterface* pimpl) {
314 CHECK(pimpl); 341 CHECK(pimpl);
315 if (!pimpl->ParseArgs()) return false; 342 if (!pimpl->ParseArgs()) return false;
316 UMA_HISTOGRAM_ENUMERATION( 343 UMA_HISTOGRAM_ENUMERATION(
317 "Download.ApiFunctions", pimpl->function(), DOWNLOADS_FUNCTION_LAST); 344 "Download.ApiFunctions", pimpl->function(), DOWNLOADS_FUNCTION_LAST);
318 return pimpl->RunInternal(); 345 return pimpl->RunInternal();
319 } 346 }
320 347
321 SyncDownloadsFunction::SyncDownloadsFunction( 348 SyncDownloadsFunction::SyncDownloadsFunction(
322 DownloadsFunctionInterface::DownloadsFunctionName function) 349 DownloadsFunctionInterface::DownloadsFunctionName function)
323 : function_(function) { 350 : function_(function) {
324 } 351 }
325 352
326 SyncDownloadsFunction::~SyncDownloadsFunction() {} 353 SyncDownloadsFunction::~SyncDownloadsFunction() {}
327 354
328 bool SyncDownloadsFunction::RunImpl() { 355 bool SyncDownloadsFunction::RunImpl() {
329 return DownloadsFunctionInterface::RunImplImpl(this); 356 return DownloadsFunctionInterface::RunImplImpl(this);
330 } 357 }
331 358
332 DownloadsFunctionInterface::DownloadsFunctionName 359 DownloadsFunctionInterface::DownloadsFunctionName
333 SyncDownloadsFunction::function() const { 360 SyncDownloadsFunction::function() const {
334 return function_; 361 return function_;
335 } 362 }
336 363
364 DownloadItem* SyncDownloadsFunction::GetActiveItem(int download_id) {
365 return GetActiveItemInternal(profile(), include_incognito(), download_id);
366 }
367
337 AsyncDownloadsFunction::AsyncDownloadsFunction( 368 AsyncDownloadsFunction::AsyncDownloadsFunction(
338 DownloadsFunctionInterface::DownloadsFunctionName function) 369 DownloadsFunctionInterface::DownloadsFunctionName function)
339 : function_(function) { 370 : function_(function) {
340 } 371 }
341 372
342 AsyncDownloadsFunction::~AsyncDownloadsFunction() {} 373 AsyncDownloadsFunction::~AsyncDownloadsFunction() {}
343 374
344 bool AsyncDownloadsFunction::RunImpl() { 375 bool AsyncDownloadsFunction::RunImpl() {
345 return DownloadsFunctionInterface::RunImplImpl(this); 376 return DownloadsFunctionInterface::RunImplImpl(this);
346 } 377 }
347 378
348 DownloadsFunctionInterface::DownloadsFunctionName 379 DownloadsFunctionInterface::DownloadsFunctionName
349 AsyncDownloadsFunction::function() const { 380 AsyncDownloadsFunction::function() const {
350 return function_; 381 return function_;
351 } 382 }
352 383
384 DownloadItem* AsyncDownloadsFunction::GetActiveItem(int download_id) {
385 return GetActiveItemInternal(profile(), include_incognito(), download_id);
386 }
387
353 DownloadsDownloadFunction::DownloadsDownloadFunction() 388 DownloadsDownloadFunction::DownloadsDownloadFunction()
354 : AsyncDownloadsFunction(DOWNLOADS_FUNCTION_DOWNLOAD) { 389 : AsyncDownloadsFunction(DOWNLOADS_FUNCTION_DOWNLOAD) {
355 } 390 }
356 391
357 DownloadsDownloadFunction::~DownloadsDownloadFunction() {} 392 DownloadsDownloadFunction::~DownloadsDownloadFunction() {}
358 393
359 DownloadsDownloadFunction::IOData::IOData() 394 DownloadsDownloadFunction::IOData::IOData()
360 : save_as(false), 395 : save_as(false),
361 extra_headers(NULL), 396 extra_headers(NULL),
362 method("GET"), 397 method("GET"),
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 if (sorter_type == sorter_types.Get().end()) { 660 if (sorter_type == sorter_types.Get().end()) {
626 error_ = download_extension_errors::kInvalidOrderByError; 661 error_ = download_extension_errors::kInvalidOrderByError;
627 return false; 662 return false;
628 } 663 }
629 query_->AddSorter(sorter_type->second, direction); 664 query_->AddSorter(sorter_type->second, direction);
630 } 665 }
631 return true; 666 return true;
632 } 667 }
633 668
634 bool DownloadsSearchFunction::RunInternal() { 669 bool DownloadsSearchFunction::RunInternal() {
670 DownloadManager* manager = NULL;
671 DownloadManager* incognito_manager = NULL;
672 GetManagers(profile(), include_incognito(), &manager, &incognito_manager);
635 DownloadQuery::DownloadVector all_items, cpp_results; 673 DownloadQuery::DownloadVector all_items, cpp_results;
636 DownloadManager* manager = DownloadServiceFactory::GetForProfile(profile())
637 ->GetDownloadManager();
638 if (has_get_id_) { 674 if (has_get_id_) {
639 DownloadItem* item = manager->GetDownloadItem(get_id_); 675 DownloadItem* item = manager->GetDownloadItem(get_id_);
640 if (item != NULL) 676 if (!item && incognito_manager)
677 item = incognito_manager->GetDownloadItem(get_id_);
678 if (item)
641 all_items.push_back(item); 679 all_items.push_back(item);
642 } else { 680 } else {
643 manager->GetAllDownloads(FilePath(FILE_PATH_LITERAL("")), &all_items); 681 manager->GetAllDownloads(FilePath(FILE_PATH_LITERAL("")), &all_items);
682 if (incognito_manager)
683 incognito_manager->GetAllDownloads(
684 FilePath(FILE_PATH_LITERAL("")), &all_items);
644 } 685 }
645 query_->Search(all_items.begin(), all_items.end(), &cpp_results); 686 query_->Search(all_items.begin(), all_items.end(), &cpp_results);
646 base::ListValue* json_results = new base::ListValue(); 687 base::ListValue* json_results = new base::ListValue();
647 for (DownloadManager::DownloadVector::const_iterator it = cpp_results.begin(); 688 for (DownloadManager::DownloadVector::const_iterator it = cpp_results.begin();
648 it != cpp_results.end(); ++it) { 689 it != cpp_results.end(); ++it) {
649 scoped_ptr<base::DictionaryValue> item(DownloadItemToJSON(*it)); 690 scoped_ptr<base::DictionaryValue> item(DownloadItemToJSON(*it));
650 json_results->Append(item.release()); 691 json_results->Append(item.release());
651 } 692 }
652 result_.reset(json_results); 693 result_.reset(json_results);
653 return true; 694 return true;
654 } 695 }
655 696
656 DownloadsPauseFunction::DownloadsPauseFunction() 697 DownloadsPauseFunction::DownloadsPauseFunction()
657 : SyncDownloadsFunction(DOWNLOADS_FUNCTION_PAUSE), 698 : SyncDownloadsFunction(DOWNLOADS_FUNCTION_PAUSE),
658 download_id_(DownloadId::Invalid().local()) { 699 download_id_(DownloadId::Invalid().local()) {
659 } 700 }
660 701
661 DownloadsPauseFunction::~DownloadsPauseFunction() {} 702 DownloadsPauseFunction::~DownloadsPauseFunction() {}
662 703
663 bool DownloadsPauseFunction::ParseArgs() { 704 bool DownloadsPauseFunction::ParseArgs() {
664 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &download_id_)); 705 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &download_id_));
665 return true; 706 return true;
666 } 707 }
667 708
668 bool DownloadsPauseFunction::RunInternal() { 709 bool DownloadsPauseFunction::RunInternal() {
669 DownloadManager* download_manager = 710 DownloadItem* download_item = GetActiveItem(download_id_);
670 DownloadServiceFactory::GetForProfile(profile())->GetDownloadManager(); 711 if ((download_item == NULL) || !download_item->IsInProgress()) {
671 DownloadItem* download_item =
672 download_manager->GetActiveDownloadItem(download_id_);
673 DCHECK(!download_item || download_item->IsInProgress());
674
675 if (!download_item) {
676 // This could be due to an invalid download ID, or it could be due to the 712 // This could be due to an invalid download ID, or it could be due to the
677 // download not being currently active. 713 // download not being currently active.
678 error_ = download_extension_errors::kInvalidOperationError; 714 error_ = download_extension_errors::kInvalidOperationError;
679 } else if (!download_item->IsPaused()) { 715 } else if (!download_item->IsPaused()) {
680 // If download_item->IsPaused() already then we treat it as a success. 716 // If download_item->IsPaused() already then we treat it as a success.
681 download_item->TogglePause(); 717 download_item->TogglePause();
682 } 718 }
683 return error_.empty(); 719 return error_.empty();
684 } 720 }
685 721
686 DownloadsResumeFunction::DownloadsResumeFunction() 722 DownloadsResumeFunction::DownloadsResumeFunction()
687 : SyncDownloadsFunction(DOWNLOADS_FUNCTION_RESUME), 723 : SyncDownloadsFunction(DOWNLOADS_FUNCTION_RESUME),
688 download_id_(DownloadId::Invalid().local()) { 724 download_id_(DownloadId::Invalid().local()) {
689 } 725 }
690 726
691 DownloadsResumeFunction::~DownloadsResumeFunction() {} 727 DownloadsResumeFunction::~DownloadsResumeFunction() {}
692 728
693 bool DownloadsResumeFunction::ParseArgs() { 729 bool DownloadsResumeFunction::ParseArgs() {
694 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &download_id_)); 730 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &download_id_));
695 return true; 731 return true;
696 } 732 }
697 733
698 bool DownloadsResumeFunction::RunInternal() { 734 bool DownloadsResumeFunction::RunInternal() {
699 DownloadManager* download_manager = 735 DownloadItem* download_item = GetActiveItem(download_id_);
700 DownloadServiceFactory::GetForProfile(profile())->GetDownloadManager(); 736 if (download_item == NULL) {
701 DownloadItem* download_item =
702 download_manager->GetActiveDownloadItem(download_id_);
703 DCHECK(!download_item || download_item->IsInProgress());
704
705 if (!download_item) {
706 // This could be due to an invalid download ID, or it could be due to the 737 // This could be due to an invalid download ID, or it could be due to the
707 // download not being currently active. 738 // download not being currently active.
708 error_ = download_extension_errors::kInvalidOperationError; 739 error_ = download_extension_errors::kInvalidOperationError;
709 } else if (download_item->IsPaused()) { 740 } else if (download_item->IsPaused()) {
710 // If !download_item->IsPaused() already, then we treat it as a success. 741 // If !download_item->IsPaused() already, then we treat it as a success.
711 download_item->TogglePause(); 742 download_item->TogglePause();
712 } 743 }
713 return error_.empty(); 744 return error_.empty();
714 } 745 }
715 746
716 DownloadsCancelFunction::DownloadsCancelFunction() 747 DownloadsCancelFunction::DownloadsCancelFunction()
717 : SyncDownloadsFunction(DOWNLOADS_FUNCTION_CANCEL), 748 : SyncDownloadsFunction(DOWNLOADS_FUNCTION_CANCEL),
718 download_id_(DownloadId::Invalid().local()) { 749 download_id_(DownloadId::Invalid().local()) {
719 } 750 }
720 751
721 DownloadsCancelFunction::~DownloadsCancelFunction() {} 752 DownloadsCancelFunction::~DownloadsCancelFunction() {}
722 753
723 bool DownloadsCancelFunction::ParseArgs() { 754 bool DownloadsCancelFunction::ParseArgs() {
724 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &download_id_)); 755 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &download_id_));
725 return true; 756 return true;
726 } 757 }
727 758
728 bool DownloadsCancelFunction::RunInternal() { 759 bool DownloadsCancelFunction::RunInternal() {
729 DownloadManager* download_manager = 760 DownloadItem* download_item = GetActiveItem(download_id_);
730 DownloadServiceFactory::GetForProfile(profile())->GetDownloadManager(); 761 if (download_item != NULL)
731 DownloadItem* download_item =
732 download_manager->GetActiveDownloadItem(download_id_);
733
734 if (download_item)
735 download_item->Cancel(true); 762 download_item->Cancel(true);
736 // |download_item| can be NULL if the download ID was invalid or if the 763 // |download_item| can be NULL if the download ID was invalid or if the
737 // download is not currently active. Either way, we don't consider it a 764 // download is not currently active. Either way, we don't consider it a
738 // failure. 765 // failure.
739 return error_.empty(); 766 return error_.empty();
740 } 767 }
741 768
742 DownloadsEraseFunction::DownloadsEraseFunction() 769 DownloadsEraseFunction::DownloadsEraseFunction()
743 : AsyncDownloadsFunction(DOWNLOADS_FUNCTION_ERASE) { 770 : AsyncDownloadsFunction(DOWNLOADS_FUNCTION_ERASE) {
744 } 771 }
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 882
856 base::DictionaryValue* options = NULL; 883 base::DictionaryValue* options = NULL;
857 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &options)); 884 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &options));
858 if (options->HasKey(kSizeKey)) { 885 if (options->HasKey(kSizeKey)) {
859 EXTENSION_FUNCTION_VALIDATE(options->GetInteger(kSizeKey, &icon_size_)); 886 EXTENSION_FUNCTION_VALIDATE(options->GetInteger(kSizeKey, &icon_size_));
860 // We only support 16px and 32px icons. This is enforced in 887 // We only support 16px and 32px icons. This is enforced in
861 // experimental.downloads.json. 888 // experimental.downloads.json.
862 DCHECK(icon_size_ == 16 || icon_size_ == 32); 889 DCHECK(icon_size_ == 16 || icon_size_ == 32);
863 } 890 }
864 891
865 DownloadManager* download_manager = 892 DownloadManager* manager = NULL;
866 DownloadServiceFactory::GetForProfile(profile())->GetDownloadManager(); 893 DownloadManager* incognito_manager = NULL;
867 DownloadItem* download_item = download_manager->GetDownloadItem(dl_id); 894 GetManagers(profile(), include_incognito(), &manager, &incognito_manager);
868 if (download_item == NULL) { 895 DownloadItem* download_item = manager->GetDownloadItem(dl_id);
896 if (!download_item && incognito_manager)
897 download_item = incognito_manager->GetDownloadItem(dl_id);
898 if (!download_item) {
869 // The DownloadItem is is added to history when the path is determined. If 899 // The DownloadItem is is added to history when the path is determined. If
870 // the download is not in history, then we don't have a path / final 900 // the download is not in history, then we don't have a path / final
871 // filename and no icon. 901 // filename and no icon.
872 error_ = download_extension_errors::kInvalidOperationError; 902 error_ = download_extension_errors::kInvalidOperationError;
873 return false; 903 return false;
874 } 904 }
875 // In-progress downloads return the intermediate filename for GetFullPath() 905 // In-progress downloads return the intermediate filename for GetFullPath()
876 // which doesn't have the final extension. Therefore we won't be able to 906 // which doesn't have the final extension. Therefore we won't be able to
877 // derive a good file icon for it. So we use GetTargetFilePath() instead. 907 // derive a good file icon for it. So we use GetTargetFilePath() instead.
878 path_ = download_item->GetTargetFilePath(); 908 path_ = download_item->GetTargetFilePath();
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 ListValue args; 1104 ListValue args;
1075 args.Append(arg); 1105 args.Append(arg);
1076 std::string json_args; 1106 std::string json_args;
1077 base::JSONWriter::Write(&args, &json_args); 1107 base::JSONWriter::Write(&args, &json_args);
1078 profile_->GetExtensionEventRouter()->DispatchEventToRenderers( 1108 profile_->GetExtensionEventRouter()->DispatchEventToRenderers(
1079 event_name, 1109 event_name,
1080 json_args, 1110 json_args,
1081 profile_, 1111 profile_,
1082 GURL()); 1112 GURL());
1083 } 1113 }
OLDNEW
« no previous file with comments | « chrome/browser/download/download_extension_api.h ('k') | chrome/browser/download/download_extension_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698