Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/policy/remote_commands/device_command_screensh ot_job.h" | 5 #include "chrome/browser/chromeos/policy/remote_commands/device_command_screensh ot_job.h" |
| 6 | 6 |
| 7 #include <fstream> | 7 #include <fstream> |
| 8 | 8 |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 135 bool DeviceCommandScreenshotJob::IsExpired(base::TimeTicks now) { | 135 bool DeviceCommandScreenshotJob::IsExpired(base::TimeTicks now) { |
| 136 return now > issued_time() + base::TimeDelta::FromMinutes( | 136 return now > issued_time() + base::TimeDelta::FromMinutes( |
| 137 kCommandExpirationTimeInMinutes); | 137 kCommandExpirationTimeInMinutes); |
| 138 } | 138 } |
| 139 | 139 |
| 140 bool DeviceCommandScreenshotJob::ParseCommandPayload( | 140 bool DeviceCommandScreenshotJob::ParseCommandPayload( |
| 141 const std::string& command_payload) { | 141 const std::string& command_payload) { |
| 142 scoped_ptr<base::Value> root(base::JSONReader().ReadToValue(command_payload)); | 142 scoped_ptr<base::Value> root(base::JSONReader().ReadToValue(command_payload)); |
| 143 if (!root.get()) | 143 if (!root.get()) |
| 144 return false; | 144 return false; |
| 145 base::DictionaryValue* payload; | 145 base::DictionaryValue* payload; |
|
pneubeck (no reviews)
2015/05/12 08:54:12
could be initialized to nullptr
cschuet (SLOW)
2015/05/12 09:29:59
Done.
| |
| 146 if (!root->GetAsDictionary(&payload)) | 146 if (!root->GetAsDictionary(&payload)) |
| 147 return false; | 147 return false; |
| 148 std::string upload_url; | 148 std::string upload_url; |
| 149 if (!payload->GetString(kUploadUrlFieldName, &upload_url)) | 149 if (!payload->GetString(kUploadUrlFieldName, &upload_url)) |
| 150 return false; | 150 return false; |
| 151 upload_url_ = GURL(upload_url); | 151 upload_url_ = GURL(upload_url); |
| 152 DCHECK(upload_url_.is_valid()) << upload_url_ << " is not a valid URL"; | |
| 153 return true; | 152 return true; |
| 154 } | 153 } |
| 155 | 154 |
| 156 void DeviceCommandScreenshotJob::StoreScreenshot( | 155 void DeviceCommandScreenshotJob::StoreScreenshot( |
| 157 size_t screen, | 156 size_t screen, |
| 158 scoped_refptr<base::RefCountedBytes> png_data) { | 157 scoped_refptr<base::RefCountedBytes> png_data) { |
| 159 screenshots_.insert(std::make_pair(screen, png_data)); | 158 screenshots_.insert(std::make_pair(screen, png_data)); |
| 160 DCHECK_LT(0, num_pending_screenshots_); | 159 DCHECK_LT(0, num_pending_screenshots_); |
| 161 --num_pending_screenshots_; | 160 --num_pending_screenshots_; |
| 162 | 161 |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 188 const CallbackWithResult& succeeded_callback, | 187 const CallbackWithResult& succeeded_callback, |
| 189 const CallbackWithResult& failed_callback) { | 188 const CallbackWithResult& failed_callback) { |
| 190 succeeded_callback_ = succeeded_callback; | 189 succeeded_callback_ = succeeded_callback; |
| 191 failed_callback_ = failed_callback; | 190 failed_callback_ = failed_callback; |
| 192 | 191 |
| 193 upload_job_ = screenshot_delegate_->CreateUploadJob(upload_url_, this); | 192 upload_job_ = screenshot_delegate_->CreateUploadJob(upload_url_, this); |
| 194 DCHECK(upload_job_); | 193 DCHECK(upload_job_); |
| 195 | 194 |
| 196 aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows(); | 195 aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows(); |
| 197 | 196 |
| 197 // Immediately fail if the upload url is invalid. | |
| 198 if (!upload_url_.is_valid()) { | |
| 199 LOG(ERROR) << upload_url_ << " is not a valid URL."; | |
| 200 base::ThreadTaskRunnerHandle::Get()->PostTask( | |
| 201 FROM_HERE, | |
| 202 base::Bind(failed_callback_, base::Passed(make_scoped_ptr( | |
| 203 new Payload(FAILURE_INVALID_URL))))); | |
| 204 return; | |
| 205 } | |
| 206 | |
| 198 // Immediately fail if there are no attached screens. | 207 // Immediately fail if there are no attached screens. |
| 199 if (root_windows.size() == 0) { | 208 if (root_windows.size() == 0) { |
| 200 base::ThreadTaskRunnerHandle::Get()->PostTask( | 209 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 201 FROM_HERE, | 210 FROM_HERE, |
| 202 base::Bind(failed_callback_, base::Passed(make_scoped_ptr(new Payload( | 211 base::Bind(failed_callback_, base::Passed(make_scoped_ptr(new Payload( |
| 203 FAILURE_SCREENSHOT_ACQUISITION))))); | 212 FAILURE_SCREENSHOT_ACQUISITION))))); |
| 213 return; | |
| 204 } | 214 } |
| 205 | 215 |
| 206 // Post tasks to the sequenced worker pool for taking screenshots on each | 216 // Post tasks to the sequenced worker pool for taking screenshots on each |
| 207 // attached screen. | 217 // attached screen. |
| 208 num_pending_screenshots_ = root_windows.size(); | 218 num_pending_screenshots_ = root_windows.size(); |
|
pneubeck (no reviews)
2015/05/12 08:54:12
you're omitting this assignment now in case of (ro
cschuet (SLOW)
2015/05/12 09:29:59
Acknowledged.
| |
| 209 for (size_t screen = 0; screen < root_windows.size(); ++screen) { | 219 for (size_t screen = 0; screen < root_windows.size(); ++screen) { |
| 210 aura::Window* root_window = root_windows[screen]; | 220 aura::Window* root_window = root_windows[screen]; |
| 211 gfx::Rect rect = root_window->bounds(); | 221 gfx::Rect rect = root_window->bounds(); |
| 212 screenshot_delegate_->TakeSnapshot( | 222 screenshot_delegate_->TakeSnapshot( |
| 213 root_window, rect, | 223 root_window, rect, |
| 214 base::Bind(&RunStoreScreenshotOnTaskRunner, | 224 base::Bind(&RunStoreScreenshotOnTaskRunner, |
| 215 base::Bind(&DeviceCommandScreenshotJob::StoreScreenshot, | 225 base::Bind(&DeviceCommandScreenshotJob::StoreScreenshot, |
| 216 weak_ptr_factory_.GetWeakPtr(), screen), | 226 weak_ptr_factory_.GetWeakPtr(), screen), |
| 217 base::ThreadTaskRunnerHandle::Get())); | 227 base::ThreadTaskRunnerHandle::Get())); |
| 218 } | 228 } |
| 219 } | 229 } |
| 220 | 230 |
| 221 void DeviceCommandScreenshotJob::TerminateImpl() { | 231 void DeviceCommandScreenshotJob::TerminateImpl() { |
| 222 weak_ptr_factory_.InvalidateWeakPtrs(); | 232 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 223 } | 233 } |
| 224 | 234 |
| 225 } // namespace policy | 235 } // namespace policy |
| OLD | NEW |