| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/arc/wallpaper/arc_wallpaper_service.h" | 5 #include "chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.h" |
| 6 | 6 |
| 7 #include "ash/common/wallpaper/wallpaper_controller.h" | 7 #include "ash/common/wallpaper/wallpaper_controller.h" |
| 8 #include "ash/common/wm_shell.h" | 8 #include "ash/shell.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| 11 #include "base/task_scheduler/post_task.h" | 11 #include "base/task_scheduler/post_task.h" |
| 12 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" | 12 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" |
| 13 #include "components/arc/arc_bridge_service.h" | 13 #include "components/arc/arc_bridge_service.h" |
| 14 #include "components/signin/core/account_id/account_id.h" | 14 #include "components/signin/core/account_id/account_id.h" |
| 15 #include "components/user_manager/user_manager.h" | 15 #include "components/user_manager/user_manager.h" |
| 16 #include "components/wallpaper/wallpaper_files_id.h" | 16 #include "components/wallpaper/wallpaper_files_id.h" |
| 17 #include "components/wallpaper/wallpaper_layout.h" | 17 #include "components/wallpaper/wallpaper_layout.h" |
| 18 #include "content/public/browser/browser_thread.h" | 18 #include "content/public/browser/browser_thread.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 // wallpaper_private_api.cc. | 60 // wallpaper_private_api.cc. |
| 61 } | 61 } |
| 62 | 62 |
| 63 std::vector<uint8_t> EncodeImagePng(const gfx::ImageSkia image) { | 63 std::vector<uint8_t> EncodeImagePng(const gfx::ImageSkia image) { |
| 64 std::vector<uint8_t> result; | 64 std::vector<uint8_t> result; |
| 65 gfx::PNGCodec::FastEncodeBGRASkBitmap(*image.bitmap(), true, &result); | 65 gfx::PNGCodec::FastEncodeBGRASkBitmap(*image.bitmap(), true, &result); |
| 66 return result; | 66 return result; |
| 67 } | 67 } |
| 68 | 68 |
| 69 ash::WallpaperController* GetWallpaperController() { | 69 ash::WallpaperController* GetWallpaperController() { |
| 70 ash::WmShell* wm_shell = ash::WmShell::Get(); | 70 if (!ash::Shell::HasInstance()) |
| 71 if (!wm_shell) | |
| 72 return nullptr; | 71 return nullptr; |
| 73 return wm_shell->wallpaper_controller(); | 72 return ash::Shell::GetInstance()->wallpaper_controller(); |
| 74 } | 73 } |
| 75 | 74 |
| 76 } // namespace | 75 } // namespace |
| 77 | 76 |
| 78 ArcWallpaperService::ArcWallpaperService(ArcBridgeService* bridge_service) | 77 ArcWallpaperService::ArcWallpaperService(ArcBridgeService* bridge_service) |
| 79 : ArcService(bridge_service), binding_(this) { | 78 : ArcService(bridge_service), binding_(this) { |
| 80 arc_bridge_service()->wallpaper()->AddObserver(this); | 79 arc_bridge_service()->wallpaper()->AddObserver(this); |
| 81 } | 80 } |
| 82 | 81 |
| 83 ArcWallpaperService::~ArcWallpaperService() { | 82 ArcWallpaperService::~ArcWallpaperService() { |
| 84 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 83 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 85 // Make sure the callback is never called after destruction. It is safe to | 84 // Make sure the callback is never called after destruction. It is safe to |
| 86 // call Cancel() even when there is no in-flight request. | 85 // call Cancel() even when there is no in-flight request. |
| 87 ImageDecoder::Cancel(this); | 86 ImageDecoder::Cancel(this); |
| 88 ash::WallpaperController* wc = GetWallpaperController(); | 87 ash::WallpaperController* wc = GetWallpaperController(); |
| 89 if (wc) | 88 if (wc) |
| 90 wc->RemoveObserver(this); | 89 wc->RemoveObserver(this); |
| 91 arc_bridge_service()->wallpaper()->RemoveObserver(this); | 90 arc_bridge_service()->wallpaper()->RemoveObserver(this); |
| 92 } | 91 } |
| 93 | 92 |
| 94 void ArcWallpaperService::OnInstanceReady() { | 93 void ArcWallpaperService::OnInstanceReady() { |
| 95 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 94 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 96 mojom::WallpaperInstance* wallpaper_instance = | 95 mojom::WallpaperInstance* wallpaper_instance = |
| 97 ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->wallpaper(), Init); | 96 ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->wallpaper(), Init); |
| 98 DCHECK(wallpaper_instance); | 97 DCHECK(wallpaper_instance); |
| 99 wallpaper_instance->Init(binding_.CreateInterfacePtrAndBind()); | 98 wallpaper_instance->Init(binding_.CreateInterfacePtrAndBind()); |
| 100 ash::WmShell::Get()->wallpaper_controller()->AddObserver(this); | 99 ash::Shell::GetInstance()->wallpaper_controller()->AddObserver(this); |
| 101 } | 100 } |
| 102 | 101 |
| 103 void ArcWallpaperService::OnInstanceClosed() { | 102 void ArcWallpaperService::OnInstanceClosed() { |
| 104 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 103 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 105 ash::WallpaperController* wc = GetWallpaperController(); | 104 ash::WallpaperController* wc = GetWallpaperController(); |
| 106 if (wc) | 105 if (wc) |
| 107 wc->RemoveObserver(this); | 106 wc->RemoveObserver(this); |
| 108 } | 107 } |
| 109 | 108 |
| 110 void ArcWallpaperService::SetWallpaper(const std::vector<uint8_t>& data) { | 109 void ArcWallpaperService::SetWallpaper(const std::vector<uint8_t>& data) { |
| 111 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 110 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 112 ImageDecoder::Cancel(this); | 111 ImageDecoder::Cancel(this); |
| 113 ImageDecoder::StartWithOptions(this, data, ImageDecoder::DEFAULT_CODEC, true, | 112 ImageDecoder::StartWithOptions(this, data, ImageDecoder::DEFAULT_CODEC, true, |
| 114 gfx::Size()); | 113 gfx::Size()); |
| 115 } | 114 } |
| 116 | 115 |
| 117 void ArcWallpaperService::GetWallpaper(const GetWallpaperCallback& callback) { | 116 void ArcWallpaperService::GetWallpaper(const GetWallpaperCallback& callback) { |
| 118 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 117 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 119 ash::WallpaperController* wc = ash::WmShell::Get()->wallpaper_controller(); | 118 ash::WallpaperController* wc = |
| 119 ash::Shell::GetInstance()->wallpaper_controller(); |
| 120 gfx::ImageSkia wallpaper = wc->GetWallpaper(); | 120 gfx::ImageSkia wallpaper = wc->GetWallpaper(); |
| 121 base::PostTaskWithTraitsAndReplyWithResult( | 121 base::PostTaskWithTraitsAndReplyWithResult( |
| 122 FROM_HERE, base::TaskTraits().MayBlock().WithPriority( | 122 FROM_HERE, base::TaskTraits().MayBlock().WithPriority( |
| 123 base::TaskPriority::BACKGROUND), | 123 base::TaskPriority::BACKGROUND), |
| 124 base::Bind(&EncodeImagePng, wallpaper), callback); | 124 base::Bind(&EncodeImagePng, wallpaper), callback); |
| 125 } | 125 } |
| 126 | 126 |
| 127 void ArcWallpaperService::OnImageDecoded(const SkBitmap& bitmap) { | 127 void ArcWallpaperService::OnImageDecoded(const SkBitmap& bitmap) { |
| 128 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 128 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 129 SetBitmapAsWallpaper(bitmap); | 129 SetBitmapAsWallpaper(bitmap); |
| 130 } | 130 } |
| 131 | 131 |
| 132 void ArcWallpaperService::OnDecodeImageFailed() { | 132 void ArcWallpaperService::OnDecodeImageFailed() { |
| 133 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 133 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 134 LOG(ERROR) << "Failed to decode wallpaper image."; | 134 LOG(ERROR) << "Failed to decode wallpaper image."; |
| 135 } | 135 } |
| 136 | 136 |
| 137 void ArcWallpaperService::OnWallpaperDataChanged() { | 137 void ArcWallpaperService::OnWallpaperDataChanged() { |
| 138 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 138 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 139 auto* wallpaper_instance = ARC_GET_INSTANCE_FOR_METHOD( | 139 auto* wallpaper_instance = ARC_GET_INSTANCE_FOR_METHOD( |
| 140 arc_bridge_service()->wallpaper(), OnWallpaperChanged); | 140 arc_bridge_service()->wallpaper(), OnWallpaperChanged); |
| 141 if (!wallpaper_instance) | 141 if (!wallpaper_instance) |
| 142 return; | 142 return; |
| 143 wallpaper_instance->OnWallpaperChanged(); | 143 wallpaper_instance->OnWallpaperChanged(); |
| 144 } | 144 } |
| 145 | 145 |
| 146 } // namespace arc | 146 } // namespace arc |
| OLD | NEW |