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

Unified Diff: chrome/browser/chromeos/extensions/file_manager/event_router.cc

Issue 507293002: Enrich fileBrowserPrivate.onFileTransfersUpdated event to support displaying total number of jobs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/extensions/file_manager/event_router.cc
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.cc b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
index 32e99b0f4b4fc20408c965de70077adf7b11d15b..6743df4f40e57dc5488166b029534edcfa48adee 100644
--- a/chrome/browser/chromeos/extensions/file_manager/event_router.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
@@ -10,6 +10,7 @@
#include "base/prefs/pref_change_registrar.h"
#include "base/prefs/pref_service.h"
#include "base/stl_util.h"
+#include "base/thread_task_runner_handle.h"
#include "base/threading/sequenced_worker_pool.h"
#include "base/values.h"
#include "chrome/browser/app_mode/app_mode_utils.h"
@@ -59,6 +60,7 @@ namespace file_browser_private = extensions::api::file_browser_private;
namespace file_manager {
namespace {
// Constants for the "transferState" field of onFileTransferUpdated event.
+const char kFileTransferStateAdded[] = "added";
const char kFileTransferStateStarted[] = "started";
const char kFileTransferStateInProgress[] = "in_progress";
const char kFileTransferStateCompleted[] = "completed";
@@ -96,6 +98,8 @@ void JobInfoToTransferStatus(
IsUploadJob(job_info.job_type) ?
file_browser_private::TRANSFER_TYPE_UPLOAD :
file_browser_private::TRANSFER_TYPE_DOWNLOAD;
+ status->num_total_jobs.reset(
+ new double(static_cast<double>(job_info.num_total_jobs)));
// JavaScript does not have 64-bit integers. Instead we use double, which
// is in IEEE 754 formant and accurate up to 52-bits in JS, and in practice
// in C++. Larger values are rounded.
@@ -340,7 +344,8 @@ EventRouter::DriveJobInfoWithStatus::DriveJobInfoWithStatus(
}
EventRouter::EventRouter(Profile* profile)
- : pref_change_registrar_(new PrefChangeRegistrar),
+ : startup_time_delta_(base::TimeDelta::FromSeconds(1)),
+ pref_change_registrar_(new PrefChangeRegistrar),
profile_(profile),
multi_user_window_manager_observer_registered_(false),
weak_factory_(this) {
@@ -579,7 +584,12 @@ void EventRouter::OnFileManagerPrefsChanged() {
void EventRouter::OnJobAdded(const drive::JobInfo& job_info) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- OnJobUpdated(job_info);
+ if (!drive::IsActiveFileTransferJobInfo(job_info))
+ return;
+ DriveJobInfoWithStatus job_info_with_status =
+ DriveJobInfoWithStatus(job_info, kFileTransferStateAdded);
+ SendDriveFileTransferEventDelay(
+ job_info_with_status, base::Time::Now(), false /* is_delayed */);
}
void EventRouter::OnJobUpdated(const drive::JobInfo& job_info) {
@@ -619,6 +629,51 @@ void EventRouter::OnJobDone(const drive::JobInfo& job_info,
drive_jobs_.erase(job_info.job_id);
}
+void EventRouter::SendDriveFileTransferEventDelay(
+ const DriveJobInfoWithStatus& job_info_with_status,
+ base::Time call_time,
+ bool is_delayed) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK_EQ(job_info_with_status.job_info.state, drive::STATE_NEW);
+
+ if (!is_delayed) {
+ last_post_delayed_task_ = base::Time::Now();
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&EventRouter::SendDriveFileTransferEventDelay,
+ weak_factory_.GetWeakPtr(),
+ job_info_with_status,
+ last_post_delayed_task_,
+ true /* is_delayed */),
+ startup_time_delta_);
+ return;
+ }
+
+ DCHECK(!last_post_delayed_task_.is_null());
+
+ if (call_time < last_post_delayed_task_) {
+ return;
+ }
+
+ // Convert the current |drive_jobs_| to IDL type.
+ std::vector<linked_ptr<file_browser_private::FileTransferStatus> >
+ status_list;
+
+ linked_ptr<file_browser_private::FileTransferStatus> status(
+ new file_browser_private::FileTransferStatus());
+ JobInfoToTransferStatus(profile_,
+ kFileManagerAppId,
+ job_info_with_status.status,
+ job_info_with_status.job_info,
+ status.get());
+ status_list.push_back(status);
+
+ BroadcastEvent(
+ profile_,
+ file_browser_private::OnFileTransfersUpdated::kEventName,
+ file_browser_private::OnFileTransfersUpdated::Create(status_list));
+}
+
void EventRouter::SendDriveFileTransferEvent(bool always) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));

Powered by Google App Engine
This is Rietveld 408576698