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

Side by Side Diff: chrome/browser/chromeos/extensions/wallpaper_api.cc

Issue 2058833002: [Merge to M52] [Retry] Fix the browser crash when changing wallpaper with chrome.wallpaper API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2743
Patch Set: Created 4 years, 6 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 | « no previous file | chrome/test/data/extensions/api_test/wallpaper/test.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/extensions/wallpaper_api.h" 5 #include "chrome/browser/chromeos/extensions/wallpaper_api.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 BrowserThread::PostTask( 221 BrowserThread::PostTask(
222 BrowserThread::UI, FROM_HERE, 222 BrowserThread::UI, FROM_HERE,
223 base::Bind(&WallpaperSetWallpaperFunction::ThumbnailGenerated, this, 223 base::Bind(&WallpaperSetWallpaperFunction::ThumbnailGenerated, this,
224 base::RetainedRef(original_data), 224 base::RetainedRef(original_data),
225 base::RetainedRef(thumbnail_data))); 225 base::RetainedRef(thumbnail_data)));
226 } 226 }
227 227
228 void WallpaperSetWallpaperFunction::ThumbnailGenerated( 228 void WallpaperSetWallpaperFunction::ThumbnailGenerated(
229 base::RefCountedBytes* original_data, 229 base::RefCountedBytes* original_data,
230 base::RefCountedBytes* thumbnail_data) { 230 base::RefCountedBytes* thumbnail_data) {
231 BinaryValue* original_result = BinaryValue::CreateWithCopiedBuffer( 231 std::unique_ptr<BinaryValue> original_result =
232 reinterpret_cast<const char*>(original_data->front()), 232 base::WrapUnique(BinaryValue::CreateWithCopiedBuffer(
233 original_data->size()); 233 reinterpret_cast<const char*>(original_data->front()),
234 BinaryValue* thumbnail_result = BinaryValue::CreateWithCopiedBuffer( 234 original_data->size()));
235 reinterpret_cast<const char*>(thumbnail_data->front()), 235 std::unique_ptr<BinaryValue> thumbnail_result =
236 thumbnail_data->size()); 236 base::WrapUnique(BinaryValue::CreateWithCopiedBuffer(
237 reinterpret_cast<const char*>(thumbnail_data->front()),
238 thumbnail_data->size()));
237 239
238 if (params_->details.thumbnail) { 240 if (params_->details.thumbnail) {
239 SetResult(thumbnail_result); 241 SetResult(thumbnail_result->DeepCopy());
240 SendResponse(true); 242 SendResponse(true);
241 } 243 }
242 244
243 // Inform the native Wallpaper Picker Application that the current wallpaper 245 // Inform the native Wallpaper Picker Application that the current wallpaper
244 // has been modified by a third party application. 246 // has been modified by a third party application.
245 if (extension()->id() != extension_misc::kWallpaperManagerId) { 247 if (extension()->id() != extension_misc::kWallpaperManagerId) {
246 Profile* profile = Profile::FromBrowserContext(browser_context()); 248 Profile* profile = Profile::FromBrowserContext(browser_context());
247 extensions::EventRouter* event_router = 249 extensions::EventRouter* event_router =
248 extensions::EventRouter::Get(profile); 250 extensions::EventRouter::Get(profile);
249 std::unique_ptr<base::ListValue> event_args(new base::ListValue()); 251 std::unique_ptr<base::ListValue> event_args(new base::ListValue());
250 event_args->Append(original_result); 252 event_args->Append(original_result->DeepCopy());
251 event_args->Append(thumbnail_result); 253 event_args->Append(thumbnail_result->DeepCopy());
252 event_args->Append(new base::StringValue( 254 event_args->Append(new base::StringValue(
253 extensions::api::wallpaper::ToString(params_->details.layout))); 255 extensions::api::wallpaper::ToString(params_->details.layout)));
254 // Setting wallpaper from right click menu in 'Files' app is a feature that 256 // Setting wallpaper from right click menu in 'Files' app is a feature that
255 // was implemented in crbug.com/578935. Since 'Files' app is a built-in v1 257 // was implemented in crbug.com/578935. Since 'Files' app is a built-in v1
256 // app in ChromeOS, we should treat it slightly differently with other third 258 // app in ChromeOS, we should treat it slightly differently with other third
257 // party apps: the wallpaper set by the 'Files' app should still be syncable 259 // party apps: the wallpaper set by the 'Files' app should still be syncable
258 // and it should not appear in the wallpaper grid in the Wallpaper Picker. 260 // and it should not appear in the wallpaper grid in the Wallpaper Picker.
259 // But we should not display the 'wallpaper-set-by-mesage' since it might 261 // But we should not display the 'wallpaper-set-by-mesage' since it might
260 // introduce confusion as shown in crbug.com/599407. 262 // introduce confusion as shown in crbug.com/599407.
261 event_args->Append(new base::StringValue( 263 event_args->Append(new base::StringValue(
(...skipping 15 matching lines...) Expand all
277 const std::string& response) { 279 const std::string& response) {
278 if (success) { 280 if (success) {
279 params_->details.data.reset( 281 params_->details.data.reset(
280 new std::vector<char>(response.begin(), response.end())); 282 new std::vector<char>(response.begin(), response.end()));
281 StartDecode(*params_->details.data); 283 StartDecode(*params_->details.data);
282 } else { 284 } else {
283 SetError(response); 285 SetError(response);
284 SendResponse(false); 286 SendResponse(false);
285 } 287 }
286 } 288 }
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/extensions/api_test/wallpaper/test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698