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

Side by Side Diff: chrome/browser/chromeos/extensions/file_manager/event_router.cc

Issue 107813005: Files.app: Use types and constants generated by the IDL compiler in the event router. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/extensions/event_names.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/chromeos/extensions/file_manager/event_router.h" 5 #include "chrome/browser/chromeos/extensions/file_manager/event_router.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/prefs/pref_change_registrar.h" 10 #include "base/prefs/pref_change_registrar.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 86
87 // Frequency of sending onFileTransferUpdated. 87 // Frequency of sending onFileTransferUpdated.
88 const int64 kFileTransferEventFrequencyInMilliseconds = 1000; 88 const int64 kFileTransferEventFrequencyInMilliseconds = 1000;
89 89
90 // Utility function to check if |job_info| is a file uploading job. 90 // Utility function to check if |job_info| is a file uploading job.
91 bool IsUploadJob(drive::JobType type) { 91 bool IsUploadJob(drive::JobType type) {
92 return (type == drive::TYPE_UPLOAD_NEW_FILE || 92 return (type == drive::TYPE_UPLOAD_NEW_FILE ||
93 type == drive::TYPE_UPLOAD_EXISTING_FILE); 93 type == drive::TYPE_UPLOAD_EXISTING_FILE);
94 } 94 }
95 95
96 // Converts the job info to its JSON (Value) form. 96 // Converts the job info to its JSON (Value) form.
mtomasz 2013/12/25 01:19:56 nit: Please update the comment.
hirono 2013/12/25 02:06:55 Done.
97 scoped_ptr<base::DictionaryValue> JobInfoToDictionaryValue( 97 void JobInfoToDictionaryValue(
98 const std::string& extension_id, 98 const std::string& extension_id,
99 const std::string& job_status, 99 const std::string& job_status,
100 const drive::JobInfo& job_info) { 100 const drive::JobInfo& job_info,
101 file_browser_private::FileTransferStatus* status) {
101 DCHECK(IsActiveFileTransferJobInfo(job_info)); 102 DCHECK(IsActiveFileTransferJobInfo(job_info));
102 103
103 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue); 104 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue);
104 GURL url = util::ConvertRelativeFilePathToFileSystemUrl( 105 GURL url = util::ConvertRelativeFilePathToFileSystemUrl(
105 job_info.file_path, extension_id); 106 job_info.file_path, extension_id);
106 result->SetString("fileUrl", url.spec()); 107 status->file_url = url.spec();
107 result->SetString("transferState", job_status); 108 status->transfer_state = file_browser_private::ParseTransferState(job_status);
108 result->SetString("transferType", 109 status->transfer_type =
109 IsUploadJob(job_info.job_type) ? "upload" : "download"); 110 IsUploadJob(job_info.job_type) ?
111 file_browser_private::TRANSFER_TYPE_UPLOAD :
112 file_browser_private::TRANSFER_TYPE_DOWNLOAD;
110 // JavaScript does not have 64-bit integers. Instead we use double, which 113 // JavaScript does not have 64-bit integers. Instead we use double, which
111 // is in IEEE 754 formant and accurate up to 52-bits in JS, and in practice 114 // is in IEEE 754 formant and accurate up to 52-bits in JS, and in practice
112 // in C++. Larger values are rounded. 115 // in C++. Larger values are rounded.
113 result->SetDouble("processed", 116 status->processed.reset(
114 static_cast<double>(job_info.num_completed_bytes)); 117 new double(static_cast<double>(job_info.num_completed_bytes)));
115 result->SetDouble("total", static_cast<double>(job_info.num_total_bytes)); 118 status->total.reset(
116 return result.Pass(); 119 new double(static_cast<double>(job_info.num_total_bytes)));
117 } 120 }
118 121
119 // Checks for availability of the Google+ Photos app. 122 // Checks for availability of the Google+ Photos app.
120 bool IsGooglePhotosInstalled(Profile *profile) { 123 bool IsGooglePhotosInstalled(Profile *profile) {
121 ExtensionService* service = 124 ExtensionService* service =
122 extensions::ExtensionSystem::Get(profile)->extension_service(); 125 extensions::ExtensionSystem::Get(profile)->extension_service();
123 if (!service) 126 if (!service)
124 return false; 127 return false;
125 128
126 // Google+ Photos uses several ids for different channels. Therefore, all of 129 // Google+ Photos uses several ids for different channels. Therefore, all of
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 profile, volume_info, &event.volume_metadata); 222 profile, volume_info, &event.volume_metadata);
220 223
221 if (!volume_info.mount_path.empty() && 224 if (!volume_info.mount_path.empty() &&
222 event.volume_metadata.mount_path.empty()) { 225 event.volume_metadata.mount_path.empty()) {
223 event.status = 226 event.status =
224 file_browser_private::MOUNT_COMPLETED_STATUS_ERROR_PATH_UNMOUNTED; 227 file_browser_private::MOUNT_COMPLETED_STATUS_ERROR_PATH_UNMOUNTED;
225 } 228 }
226 229
227 BroadcastEvent( 230 BroadcastEvent(
228 profile, 231 profile,
229 extensions::event_names::kOnFileBrowserMountCompleted, 232 file_browser_private::OnMountCompleted::kEventName,
230 file_browser_private::OnMountCompleted::Create(event)); 233 file_browser_private::OnMountCompleted::Create(event));
231 } 234 }
232 235
233 file_browser_private::CopyProgressStatusType 236 file_browser_private::CopyProgressStatusType
234 CopyProgressTypeToCopyProgressStatusType( 237 CopyProgressTypeToCopyProgressStatusType(
235 fileapi::FileSystemOperation::CopyProgressType type) { 238 fileapi::FileSystemOperation::CopyProgressType type) {
236 switch (type) { 239 switch (type) {
237 case fileapi::FileSystemOperation::BEGIN_COPY_ENTRY: 240 case fileapi::FileSystemOperation::BEGIN_COPY_ENTRY:
238 return file_browser_private::COPY_PROGRESS_STATUS_TYPE_BEGIN_COPY_ENTRY; 241 return file_browser_private::COPY_PROGRESS_STATUS_TYPE_BEGIN_COPY_ENTRY;
239 case fileapi::FileSystemOperation::END_COPY_ENTRY: 242 case fileapi::FileSystemOperation::END_COPY_ENTRY:
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 status.destination_url.reset(new std::string(destination_url.spec())); 425 status.destination_url.reset(new std::string(destination_url.spec()));
423 } else { 426 } else {
424 // Send error event. 427 // Send error event.
425 status.type = file_browser_private::COPY_PROGRESS_STATUS_TYPE_ERROR; 428 status.type = file_browser_private::COPY_PROGRESS_STATUS_TYPE_ERROR;
426 status.error.reset( 429 status.error.reset(
427 new int(fileapi::PlatformFileErrorToWebFileError(error))); 430 new int(fileapi::PlatformFileErrorToWebFileError(error)));
428 } 431 }
429 432
430 BroadcastEvent( 433 BroadcastEvent(
431 profile_, 434 profile_,
432 extensions::event_names::kOnFileBrowserCopyProgress, 435 file_browser_private::OnCopyProgress::kEventName,
433 file_browser_private::OnCopyProgress::Create(copy_id, status)); 436 file_browser_private::OnCopyProgress::Create(copy_id, status));
434 } 437 }
435 438
436 void EventRouter::OnCopyProgress( 439 void EventRouter::OnCopyProgress(
437 int copy_id, 440 int copy_id,
438 fileapi::FileSystemOperation::CopyProgressType type, 441 fileapi::FileSystemOperation::CopyProgressType type,
439 const GURL& source_url, 442 const GURL& source_url,
440 const GURL& destination_url, 443 const GURL& destination_url,
441 int64 size) { 444 int64 size) {
442 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 445 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
443 446
444 file_browser_private::CopyProgressStatus status; 447 file_browser_private::CopyProgressStatus status;
445 status.type = CopyProgressTypeToCopyProgressStatusType(type); 448 status.type = CopyProgressTypeToCopyProgressStatusType(type);
446 status.source_url.reset(new std::string(source_url.spec())); 449 status.source_url.reset(new std::string(source_url.spec()));
447 if (type == fileapi::FileSystemOperation::END_COPY_ENTRY) 450 if (type == fileapi::FileSystemOperation::END_COPY_ENTRY)
448 status.destination_url.reset(new std::string(destination_url.spec())); 451 status.destination_url.reset(new std::string(destination_url.spec()));
449 if (type == fileapi::FileSystemOperation::PROGRESS) 452 if (type == fileapi::FileSystemOperation::PROGRESS)
450 status.size.reset(new double(size)); 453 status.size.reset(new double(size));
451 454
452 BroadcastEvent( 455 BroadcastEvent(
453 profile_, 456 profile_,
454 extensions::event_names::kOnFileBrowserCopyProgress, 457 file_browser_private::OnCopyProgress::kEventName,
455 file_browser_private::OnCopyProgress::Create(copy_id, status)); 458 file_browser_private::OnCopyProgress::Create(copy_id, status));
456 } 459 }
457 460
458 void EventRouter::DefaultNetworkChanged(const chromeos::NetworkState* network) { 461 void EventRouter::DefaultNetworkChanged(const chromeos::NetworkState* network) {
459 if (!profile_ || 462 if (!profile_ ||
460 !extensions::ExtensionSystem::Get(profile_)->event_router()) { 463 !extensions::ExtensionSystem::Get(profile_)->event_router()) {
461 NOTREACHED(); 464 NOTREACHED();
462 return; 465 return;
463 } 466 }
464 467
465 BroadcastEvent( 468 BroadcastEvent(
466 profile_, 469 profile_,
467 extensions::event_names::kOnFileBrowserDriveConnectionStatusChanged, 470 file_browser_private::OnDriveConnectionStatusChanged::kEventName,
468 make_scoped_ptr(new base::ListValue)); 471 file_browser_private::OnDriveConnectionStatusChanged::Create());
469 } 472 }
470 473
471 void EventRouter::OnFileManagerPrefsChanged() { 474 void EventRouter::OnFileManagerPrefsChanged() {
472 if (!profile_ || 475 if (!profile_ ||
473 !extensions::ExtensionSystem::Get(profile_)->event_router()) { 476 !extensions::ExtensionSystem::Get(profile_)->event_router()) {
474 NOTREACHED(); 477 NOTREACHED();
475 return; 478 return;
476 } 479 }
477 480
478 BroadcastEvent( 481 BroadcastEvent(
479 profile_, 482 profile_,
480 extensions::event_names::kOnFileBrowserPreferencesChanged, 483 file_browser_private::OnPreferencesChanged::kEventName,
481 make_scoped_ptr(new base::ListValue)); 484 file_browser_private::OnPreferencesChanged::Create());
482 } 485 }
483 486
484 void EventRouter::OnJobAdded(const drive::JobInfo& job_info) { 487 void EventRouter::OnJobAdded(const drive::JobInfo& job_info) {
485 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 488 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
486 OnJobUpdated(job_info); 489 OnJobUpdated(job_info);
487 } 490 }
488 491
489 void EventRouter::OnJobUpdated(const drive::JobInfo& job_info) { 492 void EventRouter::OnJobUpdated(const drive::JobInfo& job_info) {
490 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 493 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
491 if (!drive::IsActiveFileTransferJobInfo(job_info)) 494 if (!drive::IsActiveFileTransferJobInfo(job_info))
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 // amount of time passes after the previous one. This is to avoid 535 // amount of time passes after the previous one. This is to avoid
533 // flooding the IPC between extensions by many onFileTransferUpdated events. 536 // flooding the IPC between extensions by many onFileTransferUpdated events.
534 if (!always) { 537 if (!always) {
535 const int64 delta = (now - last_file_transfer_event_).InMilliseconds(); 538 const int64 delta = (now - last_file_transfer_event_).InMilliseconds();
536 // delta < 0 may rarely happen if system clock is synced and rewinded. 539 // delta < 0 may rarely happen if system clock is synced and rewinded.
537 // To be conservative, we don't skip in that case. 540 // To be conservative, we don't skip in that case.
538 if (0 <= delta && delta < kFileTransferEventFrequencyInMilliseconds) 541 if (0 <= delta && delta < kFileTransferEventFrequencyInMilliseconds)
539 return; 542 return;
540 } 543 }
541 544
542 // Convert the current |drive_jobs_| to a JSON value. 545 // Convert the current |drive_jobs_| to IDL type.
543 scoped_ptr<base::ListValue> event_list(new base::ListValue); 546 std::vector<linked_ptr<file_browser_private::FileTransferStatus> >
mtomasz 2013/12/25 01:19:56 How about ScopedVector? https://groups.google.com
hirono 2013/12/25 02:06:55 Because IDL generated methods takes std::vector<li
547 status_list;
548 status_list.resize(drive_jobs_.size());
549 size_t i = 0;
544 for (std::map<drive::JobID, DriveJobInfoWithStatus>::iterator 550 for (std::map<drive::JobID, DriveJobInfoWithStatus>::iterator
545 iter = drive_jobs_.begin(); iter != drive_jobs_.end(); ++iter) { 551 iter = drive_jobs_.begin(); iter != drive_jobs_.end(); ++iter) {
546 552 JobInfoToDictionaryValue(kFileManagerAppId,
547 scoped_ptr<base::DictionaryValue> job_info_dict( 553 iter->second.status,
548 JobInfoToDictionaryValue(kFileManagerAppId, 554 iter->second.job_info,
549 iter->second.status, 555 status_list[i++].get());
550 iter->second.job_info));
551 event_list->Append(job_info_dict.release());
552 } 556 }
553 557
554 scoped_ptr<base::ListValue> args(new base::ListValue()); 558 BroadcastEvent(
555 args->Append(event_list.release()); 559 profile_,
556 scoped_ptr<extensions::Event> event(new extensions::Event( 560 file_browser_private::OnFileTransfersUpdated::kEventName,
557 extensions::event_names::kOnFileTransfersUpdated, args.Pass())); 561 file_browser_private::OnFileTransfersUpdated::Create(status_list));
558 extensions::ExtensionSystem::Get(profile_)->event_router()->
559 DispatchEventToExtension(kFileManagerAppId, event.Pass());
560
561 last_file_transfer_event_ = now; 562 last_file_transfer_event_ = now;
562 } 563 }
563 564
564 void EventRouter::OnDirectoryChanged(const base::FilePath& directory_path) { 565 void EventRouter::OnDirectoryChanged(const base::FilePath& directory_path) {
565 HandleFileWatchNotification(directory_path, false); 566 HandleFileWatchNotification(directory_path, false);
566 } 567 }
567 568
568 void EventRouter::OnRefreshTokenInvalid() { 569 void EventRouter::OnRefreshTokenInvalid() {
569 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 570 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
570 571
571 // Raise a DriveConnectionStatusChanged event to notify the status offline. 572 // Raise a DriveConnectionStatusChanged event to notify the status offline.
572 BroadcastEvent( 573 BroadcastEvent(
573 profile_, 574 profile_,
574 extensions::event_names::kOnFileBrowserDriveConnectionStatusChanged, 575 file_browser_private::OnDriveConnectionStatusChanged::kEventName,
575 make_scoped_ptr(new base::ListValue)); 576 file_browser_private::OnDriveConnectionStatusChanged::Create());
576 } 577 }
577 578
578 void EventRouter::HandleFileWatchNotification(const base::FilePath& local_path, 579 void EventRouter::HandleFileWatchNotification(const base::FilePath& local_path,
579 bool got_error) { 580 bool got_error) {
580 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 581 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
581 582
582 WatcherMap::const_iterator iter = file_watchers_.find(local_path); 583 WatcherMap::const_iterator iter = file_watchers_.find(local_path);
583 if (iter == file_watchers_.end()) { 584 if (iter == file_watchers_.end()) {
584 return; 585 return;
585 } 586 }
(...skipping 23 matching lines...) Expand all
609 fileapi::FileSystemInfo info = 610 fileapi::FileSystemInfo info =
610 fileapi::GetFileSystemInfoForChromeOS(target_origin_url.GetOrigin()); 611 fileapi::GetFileSystemInfoForChromeOS(target_origin_url.GetOrigin());
611 base::DictionaryValue* entry = new base::DictionaryValue(); 612 base::DictionaryValue* entry = new base::DictionaryValue();
612 entry->SetString("fileSystemName", info.name); 613 entry->SetString("fileSystemName", info.name);
613 entry->SetString("fileSystemRoot", info.root_url.spec()); 614 entry->SetString("fileSystemRoot", info.root_url.spec());
614 entry->SetString("fileFullPath", "/" + virtual_path.value()); 615 entry->SetString("fileFullPath", "/" + virtual_path.value());
615 entry->SetBoolean("fileIsDirectory", true); 616 entry->SetBoolean("fileIsDirectory", true);
616 watch_info->Set("entry", entry); 617 watch_info->Set("entry", entry);
617 watch_info->SetString("eventType", 618 watch_info->SetString("eventType",
618 got_error ? kPathWatchError : kPathChanged); 619 got_error ? kPathWatchError : kPathChanged);
619 scoped_ptr<extensions::Event> event(new extensions::Event( 620 BroadcastEvent(
620 extensions::event_names::kOnDirectoryChanged, args.Pass())); 621 profile_,
621 extensions::ExtensionSystem::Get(profile_)->event_router()-> 622 file_browser_private::OnDirectoryChanged::kEventName,
622 DispatchEventToExtension(extension_id, event.Pass()); 623 args.Pass());
623 } 624 }
624 } 625 }
625 626
626 void EventRouter::ShowRemovableDeviceInFileManager( 627 void EventRouter::ShowRemovableDeviceInFileManager(
627 const base::FilePath& mount_path) { 628 const base::FilePath& mount_path) {
628 // Do not attempt to open File Manager while the login is in progress or 629 // Do not attempt to open File Manager while the login is in progress or
629 // the screen is locked. 630 // the screen is locked.
630 if (chromeos::LoginDisplayHostImpl::default_host() || 631 if (chromeos::LoginDisplayHostImpl::default_host() ||
631 chromeos::ScreenLocker::default_screen_locker()) 632 chromeos::ScreenLocker::default_screen_locker())
632 return; 633 return;
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 base::TimeDelta::FromSeconds(4)); 762 base::TimeDelta::FromSeconds(4));
762 } else { 763 } else {
763 notifications_->HideNotification(DesktopNotifications::FORMAT_START, 764 notifications_->HideNotification(DesktopNotifications::FORMAT_START,
764 device_path); 765 device_path);
765 notifications_->ShowNotification(DesktopNotifications::FORMAT_FAIL, 766 notifications_->ShowNotification(DesktopNotifications::FORMAT_FAIL,
766 device_path); 767 device_path);
767 } 768 }
768 } 769 }
769 770
770 } // namespace file_manager 771 } // namespace file_manager
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/event_names.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698