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

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

Issue 1870793002: Convert //chrome/browser/chromeos from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 8 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
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 #include <utility> 8 #include <utility>
9 9
10 #include "ash/shell.h" 10 #include "ash/shell.h"
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/json/json_reader.h" 12 #include "base/json/json_reader.h"
13 #include "base/json/json_writer.h" 13 #include "base/json/json_writer.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/ptr_util.h"
15 #include "base/strings/string_number_conversions.h" 16 #include "base/strings/string_number_conversions.h"
16 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
17 #include "base/thread_task_runner_handle.h" 18 #include "base/thread_task_runner_handle.h"
18 #include "base/threading/sequenced_worker_pool.h" 19 #include "base/threading/sequenced_worker_pool.h"
19 #include "base/values.h" 20 #include "base/values.h"
20 #include "chrome/browser/chromeos/policy/upload_job_impl.h" 21 #include "chrome/browser/chromeos/policy/upload_job_impl.h"
21 #include "content/public/browser/browser_thread.h" 22 #include "content/public/browser/browser_thread.h"
22 #include "net/http/http_request_headers.h" 23 #include "net/http/http_request_headers.h"
23 #include "policy/proto/device_management_backend.pb.h" 24 #include "policy/proto/device_management_backend.pb.h"
24 25
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 66
66 } // namespace 67 } // namespace
67 68
68 class DeviceCommandScreenshotJob::Payload 69 class DeviceCommandScreenshotJob::Payload
69 : public RemoteCommandJob::ResultPayload { 70 : public RemoteCommandJob::ResultPayload {
70 public: 71 public:
71 explicit Payload(ResultCode result_code); 72 explicit Payload(ResultCode result_code);
72 ~Payload() override {} 73 ~Payload() override {}
73 74
74 // RemoteCommandJob::ResultPayload: 75 // RemoteCommandJob::ResultPayload:
75 scoped_ptr<std::string> Serialize() override; 76 std::unique_ptr<std::string> Serialize() override;
76 77
77 private: 78 private:
78 std::string payload_; 79 std::string payload_;
79 80
80 DISALLOW_COPY_AND_ASSIGN(Payload); 81 DISALLOW_COPY_AND_ASSIGN(Payload);
81 }; 82 };
82 83
83 DeviceCommandScreenshotJob::Payload::Payload(ResultCode result_code) { 84 DeviceCommandScreenshotJob::Payload::Payload(ResultCode result_code) {
84 base::DictionaryValue root_dict; 85 base::DictionaryValue root_dict;
85 if (result_code != SUCCESS) 86 if (result_code != SUCCESS)
86 root_dict.SetInteger(kResultFieldName, result_code); 87 root_dict.SetInteger(kResultFieldName, result_code);
87 base::JSONWriter::Write(root_dict, &payload_); 88 base::JSONWriter::Write(root_dict, &payload_);
88 } 89 }
89 90
90 scoped_ptr<std::string> DeviceCommandScreenshotJob::Payload::Serialize() { 91 std::unique_ptr<std::string> DeviceCommandScreenshotJob::Payload::Serialize() {
91 return make_scoped_ptr(new std::string(payload_)); 92 return base::WrapUnique(new std::string(payload_));
92 } 93 }
93 94
94 DeviceCommandScreenshotJob::DeviceCommandScreenshotJob( 95 DeviceCommandScreenshotJob::DeviceCommandScreenshotJob(
95 scoped_ptr<Delegate> screenshot_delegate) 96 std::unique_ptr<Delegate> screenshot_delegate)
96 : num_pending_screenshots_(0), 97 : num_pending_screenshots_(0),
97 screenshot_delegate_(std::move(screenshot_delegate)), 98 screenshot_delegate_(std::move(screenshot_delegate)),
98 weak_ptr_factory_(this) { 99 weak_ptr_factory_(this) {
99 DCHECK(screenshot_delegate_); 100 DCHECK(screenshot_delegate_);
100 } 101 }
101 102
102 DeviceCommandScreenshotJob::~DeviceCommandScreenshotJob() { 103 DeviceCommandScreenshotJob::~DeviceCommandScreenshotJob() {
103 } 104 }
104 105
105 enterprise_management::RemoteCommand_Type DeviceCommandScreenshotJob::GetType() 106 enterprise_management::RemoteCommand_Type DeviceCommandScreenshotJob::GetType()
106 const { 107 const {
107 return enterprise_management::RemoteCommand_Type_DEVICE_SCREENSHOT; 108 return enterprise_management::RemoteCommand_Type_DEVICE_SCREENSHOT;
108 } 109 }
109 110
110 void DeviceCommandScreenshotJob::OnSuccess() { 111 void DeviceCommandScreenshotJob::OnSuccess() {
111 base::ThreadTaskRunnerHandle::Get()->PostTask( 112 base::ThreadTaskRunnerHandle::Get()->PostTask(
112 FROM_HERE, 113 FROM_HERE,
113 base::Bind(succeeded_callback_, 114 base::Bind(succeeded_callback_,
114 base::Passed(make_scoped_ptr(new Payload(SUCCESS))))); 115 base::Passed(base::WrapUnique(new Payload(SUCCESS)))));
115 } 116 }
116 117
117 void DeviceCommandScreenshotJob::OnFailure(UploadJob::ErrorCode error_code) { 118 void DeviceCommandScreenshotJob::OnFailure(UploadJob::ErrorCode error_code) {
118 ResultCode result_code = FAILURE_CLIENT; 119 ResultCode result_code = FAILURE_CLIENT;
119 switch (error_code) { 120 switch (error_code) {
120 case UploadJob::AUTHENTICATION_ERROR: 121 case UploadJob::AUTHENTICATION_ERROR:
121 result_code = FAILURE_AUTHENTICATION; 122 result_code = FAILURE_AUTHENTICATION;
122 break; 123 break;
123 case UploadJob::NETWORK_ERROR: 124 case UploadJob::NETWORK_ERROR:
124 case UploadJob::SERVER_ERROR: 125 case UploadJob::SERVER_ERROR:
125 result_code = FAILURE_SERVER; 126 result_code = FAILURE_SERVER;
126 break; 127 break;
127 } 128 }
128 base::ThreadTaskRunnerHandle::Get()->PostTask( 129 base::ThreadTaskRunnerHandle::Get()->PostTask(
129 FROM_HERE, 130 FROM_HERE,
130 base::Bind(failed_callback_, 131 base::Bind(failed_callback_,
131 base::Passed(make_scoped_ptr(new Payload(result_code))))); 132 base::Passed(base::WrapUnique(new Payload(result_code)))));
132 } 133 }
133 134
134 bool DeviceCommandScreenshotJob::IsExpired(base::TimeTicks now) { 135 bool DeviceCommandScreenshotJob::IsExpired(base::TimeTicks now) {
135 return now > issued_time() + base::TimeDelta::FromMinutes( 136 return now > issued_time() + base::TimeDelta::FromMinutes(
136 kCommandExpirationTimeInMinutes); 137 kCommandExpirationTimeInMinutes);
137 } 138 }
138 139
139 bool DeviceCommandScreenshotJob::ParseCommandPayload( 140 bool DeviceCommandScreenshotJob::ParseCommandPayload(
140 const std::string& command_payload) { 141 const std::string& command_payload) {
141 scoped_ptr<base::Value> root(base::JSONReader().ReadToValue(command_payload)); 142 std::unique_ptr<base::Value> root(
143 base::JSONReader().ReadToValue(command_payload));
142 if (!root.get()) 144 if (!root.get())
143 return false; 145 return false;
144 base::DictionaryValue* payload = nullptr; 146 base::DictionaryValue* payload = nullptr;
145 if (!root->GetAsDictionary(&payload)) 147 if (!root->GetAsDictionary(&payload))
146 return false; 148 return false;
147 std::string upload_url; 149 std::string upload_url;
148 if (!payload->GetString(kUploadUrlFieldName, &upload_url)) 150 if (!payload->GetString(kUploadUrlFieldName, &upload_url))
149 return false; 151 return false;
150 upload_url_ = GURL(upload_url); 152 upload_url_ = GURL(upload_url);
151 return true; 153 return true;
(...skipping 12 matching lines...) Expand all
164 166
165 void DeviceCommandScreenshotJob::StartScreenshotUpload() { 167 void DeviceCommandScreenshotJob::StartScreenshotUpload() {
166 for (const auto& screenshot_entry : screenshots_) { 168 for (const auto& screenshot_entry : screenshots_) {
167 std::map<std::string, std::string> header_fields; 169 std::map<std::string, std::string> header_fields;
168 header_fields.insert( 170 header_fields.insert(
169 std::make_pair(kFileTypeHeaderName, kFileTypeScreenshotFile)); 171 std::make_pair(kFileTypeHeaderName, kFileTypeScreenshotFile));
170 header_fields.insert(std::make_pair(net::HttpRequestHeaders::kContentType, 172 header_fields.insert(std::make_pair(net::HttpRequestHeaders::kContentType,
171 kContentTypeImagePng)); 173 kContentTypeImagePng));
172 header_fields.insert(std::make_pair(kCommandIdHeaderName, 174 header_fields.insert(std::make_pair(kCommandIdHeaderName,
173 base::Uint64ToString(unique_id()))); 175 base::Uint64ToString(unique_id())));
174 scoped_ptr<std::string> data = make_scoped_ptr( 176 std::unique_ptr<std::string> data = base::WrapUnique(
175 new std::string((const char*)screenshot_entry.second->front(), 177 new std::string((const char*)screenshot_entry.second->front(),
176 screenshot_entry.second->size())); 178 screenshot_entry.second->size()));
177 upload_job_->AddDataSegment( 179 upload_job_->AddDataSegment(
178 base::StringPrintf(kNameFieldTemplate, screenshot_entry.first), 180 base::StringPrintf(kNameFieldTemplate, screenshot_entry.first),
179 base::StringPrintf(kFilenameFieldTemplate, screenshot_entry.first), 181 base::StringPrintf(kFilenameFieldTemplate, screenshot_entry.first),
180 header_fields, std::move(data)); 182 header_fields, std::move(data));
181 } 183 }
182 upload_job_->Start(); 184 upload_job_->Start();
183 } 185 }
184 186
185 void DeviceCommandScreenshotJob::RunImpl( 187 void DeviceCommandScreenshotJob::RunImpl(
186 const CallbackWithResult& succeeded_callback, 188 const CallbackWithResult& succeeded_callback,
187 const CallbackWithResult& failed_callback) { 189 const CallbackWithResult& failed_callback) {
188 succeeded_callback_ = succeeded_callback; 190 succeeded_callback_ = succeeded_callback;
189 failed_callback_ = failed_callback; 191 failed_callback_ = failed_callback;
190 192
191 // Fail if the delegate says screenshots are not allowed in this session. 193 // Fail if the delegate says screenshots are not allowed in this session.
192 if (!screenshot_delegate_->IsScreenshotAllowed()) { 194 if (!screenshot_delegate_->IsScreenshotAllowed()) {
193 base::ThreadTaskRunnerHandle::Get()->PostTask( 195 base::ThreadTaskRunnerHandle::Get()->PostTask(
194 FROM_HERE, 196 FROM_HERE,
195 base::Bind(failed_callback_, base::Passed(make_scoped_ptr( 197 base::Bind(failed_callback_, base::Passed(base::WrapUnique(
196 new Payload(FAILURE_USER_INPUT))))); 198 new Payload(FAILURE_USER_INPUT)))));
197 } 199 }
198 200
199 aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows(); 201 aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows();
200 202
201 // Immediately fail if the upload url is invalid. 203 // Immediately fail if the upload url is invalid.
202 if (!upload_url_.is_valid()) { 204 if (!upload_url_.is_valid()) {
203 LOG(ERROR) << upload_url_ << " is not a valid URL."; 205 LOG(ERROR) << upload_url_ << " is not a valid URL.";
204 base::ThreadTaskRunnerHandle::Get()->PostTask( 206 base::ThreadTaskRunnerHandle::Get()->PostTask(
205 FROM_HERE, 207 FROM_HERE,
206 base::Bind(failed_callback_, base::Passed(make_scoped_ptr( 208 base::Bind(failed_callback_, base::Passed(base::WrapUnique(
207 new Payload(FAILURE_INVALID_URL))))); 209 new Payload(FAILURE_INVALID_URL)))));
208 return; 210 return;
209 } 211 }
210 212
211 // Immediately fail if there are no attached screens. 213 // Immediately fail if there are no attached screens.
212 if (root_windows.size() == 0) { 214 if (root_windows.size() == 0) {
213 base::ThreadTaskRunnerHandle::Get()->PostTask( 215 base::ThreadTaskRunnerHandle::Get()->PostTask(
214 FROM_HERE, 216 FROM_HERE,
215 base::Bind(failed_callback_, base::Passed(make_scoped_ptr(new Payload( 217 base::Bind(failed_callback_, base::Passed(base::WrapUnique(new Payload(
216 FAILURE_SCREENSHOT_ACQUISITION))))); 218 FAILURE_SCREENSHOT_ACQUISITION)))));
217 return; 219 return;
218 } 220 }
219 221
220 upload_job_ = screenshot_delegate_->CreateUploadJob(upload_url_, this); 222 upload_job_ = screenshot_delegate_->CreateUploadJob(upload_url_, this);
221 DCHECK(upload_job_); 223 DCHECK(upload_job_);
222 224
223 // Post tasks to the sequenced worker pool for taking screenshots on each 225 // Post tasks to the sequenced worker pool for taking screenshots on each
224 // attached screen. 226 // attached screen.
225 num_pending_screenshots_ = root_windows.size(); 227 num_pending_screenshots_ = root_windows.size();
226 for (size_t screen = 0; screen < root_windows.size(); ++screen) { 228 for (size_t screen = 0; screen < root_windows.size(); ++screen) {
227 aura::Window* root_window = root_windows[screen]; 229 aura::Window* root_window = root_windows[screen];
228 gfx::Rect rect = root_window->bounds(); 230 gfx::Rect rect = root_window->bounds();
229 screenshot_delegate_->TakeSnapshot( 231 screenshot_delegate_->TakeSnapshot(
230 root_window, rect, 232 root_window, rect,
231 base::Bind(&RunStoreScreenshotOnTaskRunner, 233 base::Bind(&RunStoreScreenshotOnTaskRunner,
232 base::Bind(&DeviceCommandScreenshotJob::StoreScreenshot, 234 base::Bind(&DeviceCommandScreenshotJob::StoreScreenshot,
233 weak_ptr_factory_.GetWeakPtr(), screen), 235 weak_ptr_factory_.GetWeakPtr(), screen),
234 base::ThreadTaskRunnerHandle::Get())); 236 base::ThreadTaskRunnerHandle::Get()));
235 } 237 }
236 } 238 }
237 239
238 void DeviceCommandScreenshotJob::TerminateImpl() { 240 void DeviceCommandScreenshotJob::TerminateImpl() {
239 weak_ptr_factory_.InvalidateWeakPtrs(); 241 weak_ptr_factory_.InvalidateWeakPtrs();
240 } 242 }
241 243
242 } // namespace policy 244 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698