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 |