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

Side by Side Diff: chrome/browser/chromeos/policy/remote_commands/device_command_screenshot_job.cc

Issue 1138063006: Add invalid url failure to screencapture command (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: typo Created 5 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
« no previous file with comments | « chrome/browser/chromeos/policy/remote_commands/device_command_screenshot_job.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/policy/remote_commands/device_command_screenshot_job.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698