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

Side by Side Diff: chrome/browser/ui/app_list/arc/arc_app_utils.cc

Issue 2540713003: Revert of Propagate information about how ARC apps are launched (Closed)
Patch Set: Created 4 years 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 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/ui/app_list/arc/arc_app_utils.h" 5 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
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_writer.h"
13 #include "base/synchronization/waitable_event.h" 12 #include "base/synchronization/waitable_event.h"
14 #include "base/values.h"
15 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" 13 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
16 #include "chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.h" 14 #include "chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.h"
17 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" 15 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
18 #include "chromeos/dbus/dbus_thread_manager.h" 16 #include "chromeos/dbus/dbus_thread_manager.h"
19 #include "chromeos/dbus/session_manager_client.h" 17 #include "chromeos/dbus/session_manager_client.h"
20 #include "components/arc/arc_bridge_service.h" 18 #include "components/arc/arc_bridge_service.h"
21 #include "components/arc/common/intent_helper.mojom.h" 19 #include "components/arc/common/intent_helper.mojom.h"
22 #include "ui/aura/window.h" 20 #include "ui/aura/window.h"
23 #include "ui/display/display.h" 21 #include "ui/display/display.h"
24 #include "ui/display/screen.h" 22 #include "ui/display/screen.h"
25 #include "ui/events/event_constants.h"
26 23
27 namespace arc { 24 namespace arc {
28 25
29 namespace { 26 namespace {
30 27
31 // Default sizes to use. 28 // Default sizes to use.
32 constexpr int kNexus7Width = 960; 29 constexpr int kNexus7Width = 960;
33 constexpr int kNexus7Height = 600; 30 constexpr int kNexus7Height = 600;
34 constexpr int kNexus5Width = 410; 31 constexpr int kNexus5Width = 410;
35 constexpr int kNexus5Height = 690; 32 constexpr int kNexus5Height = 690;
(...skipping 10 matching lines...) Expand all
46 43
47 // Service name strings. 44 // Service name strings.
48 constexpr char kCanHandleResolutionStr[] = "get resolution capability"; 45 constexpr char kCanHandleResolutionStr[] = "get resolution capability";
49 constexpr char kCloseTaskStr[] = "close task"; 46 constexpr char kCloseTaskStr[] = "close task";
50 constexpr char kLaunchAppStr[] = "launch app"; 47 constexpr char kLaunchAppStr[] = "launch app";
51 constexpr char kRemoveIconStr[] = "remove icon"; 48 constexpr char kRemoveIconStr[] = "remove icon";
52 constexpr char kSetActiveTaskStr[] = "set active task"; 49 constexpr char kSetActiveTaskStr[] = "set active task";
53 constexpr char kShowPackageInfoStr[] = "show package info"; 50 constexpr char kShowPackageInfoStr[] = "show package info";
54 constexpr char kUninstallPackageStr[] = "uninstall package"; 51 constexpr char kUninstallPackageStr[] = "uninstall package";
55 52
56 // Intent helper strings.
57 constexpr char kIntentHelperClassName[] =
58 "org.chromium.arc.intent_helper.SettingsReceiver";
59 constexpr char kIntentHelperPackageName[] = "org.chromium.arc.intent_helper";
60 constexpr char kSendBroadcastStr[] = "SendBroadcast";
61 constexpr char kSetInTouchModeIntent[] =
62 "org.chromium.arc.intent_helper.SET_IN_TOUCH_MODE";
63 constexpr char kShowTalkbackSettingsIntent[] =
64 "org.chromium.arc.intent_helper.SHOW_TALKBACK_SETTINGS";
65
66 // Helper function which returns the AppInstance. Create related logs when error 53 // Helper function which returns the AppInstance. Create related logs when error
67 // happens. 54 // happens.
68 arc::mojom::AppInstance* GetAppInstance(uint32_t required_version, 55 arc::mojom::AppInstance* GetAppInstance(uint32_t required_version,
69 const std::string& service_name) { 56 const std::string& service_name) {
70 arc::ArcBridgeService* bridge_service = arc::ArcBridgeService::Get(); 57 arc::ArcBridgeService* bridge_service = arc::ArcBridgeService::Get();
71 if (!bridge_service) { 58 if (!bridge_service) {
72 VLOG(2) << "Request to " << service_name 59 VLOG(2) << "Request to " << service_name
73 << " when bridge service is not ready."; 60 << " when bridge service is not ready.";
74 return nullptr; 61 return nullptr;
75 } 62 }
76 63
77 return bridge_service->app()->GetInstanceForMethod(service_name.c_str(), 64 return bridge_service->app()->GetInstanceForMethod(service_name.c_str(),
78 required_version); 65 required_version);
79 } 66 }
80 67
81 // Helper function which returns the IntentHelperInstance. Create related logs
82 // when error happens.
83 arc::mojom::IntentHelperInstance* GetIntentHelperInstance(
84 uint32_t required_version,
85 const std::string& service_name) {
86 arc::ArcBridgeService* bridge_service = arc::ArcBridgeService::Get();
87 if (!bridge_service) {
88 VLOG(2) << "Request to " << service_name
89 << " when bridge service is not ready.";
90 return nullptr;
91 }
92
93 return bridge_service->intent_helper()->GetInstanceForMethod(
94 service_name.c_str(), required_version);
95 }
96
97 void PrioritizeArcInstanceCallback(bool success) { 68 void PrioritizeArcInstanceCallback(bool success) {
98 VLOG(2) << "Finished prioritizing the instance: result=" << success; 69 VLOG(2) << "Finished prioritizing the instance: result=" << success;
99 if (!success) 70 if (!success)
100 LOG(ERROR) << "Failed to prioritize ARC"; 71 LOG(ERROR) << "Failed to prioritize ARC";
101 } 72 }
102 73
103 // Find a proper size and position for a given rectangle on the screen. 74 // Find a proper size and position for a given rectangle on the screen.
104 // TODO(skuhne): This needs more consideration, but it is lacking 75 // TODO(skuhne): This needs more consideration, but it is lacking
105 // WindowPositioner functionality since we do not have an Aura::Window yet. 76 // WindowPositioner functionality since we do not have an Aura::Window yet.
106 gfx::Rect GetTargetRect(const gfx::Size& size) { 77 gfx::Rect GetTargetRect(const gfx::Size& size) {
(...skipping 17 matching lines...) Expand all
124 // WindowPositioner::GetDefaultWindowBounds does for now. 95 // WindowPositioner::GetDefaultWindowBounds does for now.
125 // Note: Android's positioning will not overlap the shelf - as such we can 96 // Note: Android's positioning will not overlap the shelf - as such we can
126 // ignore the given workspace inset. 97 // ignore the given workspace inset.
127 // TODO(skuhne): Replace this with some more useful logic from the 98 // TODO(skuhne): Replace this with some more useful logic from the
128 // WindowPositioner. 99 // WindowPositioner.
129 result.set_x((work_area.width() - result.width()) / 2); 100 result.set_x((work_area.width() - result.width()) / 2);
130 result.set_y((work_area.height() - result.height()) / 2); 101 result.set_y((work_area.height() - result.height()) / 2);
131 return result; 102 return result;
132 } 103 }
133 104
134 // Returns true if |event_flags| came from a mouse or touch event.
135 bool IsMouseOrTouchEventFromFlags(int event_flags) {
136 return (event_flags & (ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON |
137 ui::EF_RIGHT_MOUSE_BUTTON | ui::EF_BACK_MOUSE_BUTTON |
138 ui::EF_FORWARD_MOUSE_BUTTON | ui::EF_FROM_TOUCH)) != 0;
139 }
140
141 // A class which handles the asynchronous ARC runtime callback to figure out if 105 // A class which handles the asynchronous ARC runtime callback to figure out if
142 // an app can handle a certain resolution or not. 106 // an app can handle a certain resolution or not.
143 // After LaunchAndRelease() got called, the object will destroy itself once 107 // After LaunchAndRelease() got called, the object will destroy itself once
144 // done. 108 // done.
145 class LaunchAppWithoutSize { 109 class LaunchAppWithoutSize {
146 public: 110 public:
147 LaunchAppWithoutSize(content::BrowserContext* context, 111 LaunchAppWithoutSize(content::BrowserContext* context,
148 const std::string& app_id, 112 const std::string& app_id,
149 bool landscape_mode, 113 bool landscape_mode)
150 int event_flags) 114 : context_(context), app_id_(app_id), landscape_mode_(landscape_mode) {}
151 : context_(context),
152 app_id_(app_id),
153 landscape_mode_(landscape_mode),
154 event_flags_(event_flags) {}
155 115
156 // This will launch the request and after the return the creator does not 116 // This will launch the request and after the return the creator does not
157 // need to delete the object anymore. 117 // need to delete the object anymore.
158 bool LaunchAndRelease() { 118 bool LaunchAndRelease() {
159 landscape_ = landscape_mode_ ? gfx::Rect(0, 0, kNexus7Width, kNexus7Height) 119 landscape_ = landscape_mode_ ? gfx::Rect(0, 0, kNexus7Width, kNexus7Height)
160 : gfx::Rect(0, 0, kNexus5Width, kNexus5Height); 120 : gfx::Rect(0, 0, kNexus5Width, kNexus5Height);
161 if (!ash::Shell::HasInstance()) { 121 if (!ash::Shell::HasInstance()) {
162 // Skip this if there is no Ash shell. 122 // Skip this if there is no Ash shell.
163 LaunchAppWithRect(context_, app_id_, landscape_, event_flags_); 123 LaunchAppWithRect(context_, app_id_, landscape_);
164 delete this; 124 delete this;
165 return true; 125 return true;
166 } 126 }
167 127
168 // TODO(skuhne): Change CanHandleResolution into a call which returns 128 // TODO(skuhne): Change CanHandleResolution into a call which returns
169 // capability flags like [PHONE/TABLET]_[LANDSCAPE/PORTRAIT] and which 129 // capability flags like [PHONE/TABLET]_[LANDSCAPE/PORTRAIT] and which
170 // might also return the used DP->PIX conversion constant to do better 130 // might also return the used DP->PIX conversion constant to do better
171 // size calculations. 131 // size calculations.
172 bool result = CanHandleResolution( 132 bool result = CanHandleResolution(
173 context_, app_id_, landscape_, 133 context_, app_id_, landscape_,
174 base::Bind(&LaunchAppWithoutSize::Callback, base::Unretained(this))); 134 base::Bind(&LaunchAppWithoutSize::Callback, base::Unretained(this)));
175 if (!result) 135 if (!result)
176 delete this; 136 delete this;
177 137
178 return result; 138 return result;
179 } 139 }
180 140
181 private: 141 private:
182 content::BrowserContext* context_; 142 content::BrowserContext* context_;
183 const std::string app_id_; 143 const std::string app_id_;
184 const bool landscape_mode_; 144 const bool landscape_mode_;
185 gfx::Rect landscape_; 145 gfx::Rect landscape_;
186 const int event_flags_;
187 146
188 // The callback handler which gets called from the CanHandleResolution 147 // The callback handler which gets called from the CanHandleResolution
189 // function. 148 // function.
190 void Callback(bool can_handle) { 149 void Callback(bool can_handle) {
191 gfx::Size target_size = 150 gfx::Size target_size =
192 can_handle ? landscape_.size() : gfx::Size(kNexus5Width, kNexus5Height); 151 can_handle ? landscape_.size() : gfx::Size(kNexus5Width, kNexus5Height);
193 LaunchAppWithRect(context_, app_id_, GetTargetRect(target_size), 152 LaunchAppWithRect(context_, app_id_, GetTargetRect(target_size));
194 event_flags_);
195 // Now that we are done, we can delete ourselves. 153 // Now that we are done, we can delete ourselves.
196 delete this; 154 delete this;
197 } 155 }
198 156
199 DISALLOW_COPY_AND_ASSIGN(LaunchAppWithoutSize); 157 DISALLOW_COPY_AND_ASSIGN(LaunchAppWithoutSize);
200 }; 158 };
201 159
202 } // namespace 160 } // namespace
203 161
204 const char kPlayStoreAppId[] = "gpkmicpkkebkmabiaedjognfppcchdfa"; 162 const char kPlayStoreAppId[] = "gpkmicpkkebkmabiaedjognfppcchdfa";
205 const char kPlayStorePackage[] = "com.android.vending"; 163 const char kPlayStorePackage[] = "com.android.vending";
206 const char kPlayStoreActivity[] = "com.android.vending.AssetBrowserActivity"; 164 const char kPlayStoreActivity[] = "com.android.vending.AssetBrowserActivity";
207 const char kSettingsAppId[] = "mconboelelhjpkbdhhiijkgcimoangdj"; 165 const char kSettingsAppId[] = "mconboelelhjpkbdhhiijkgcimoangdj";
208 166
209 bool ShouldShowInLauncher(const std::string& app_id) { 167 bool ShouldShowInLauncher(const std::string& app_id) {
210 return (app_id != kSettingsAppId); 168 return (app_id != kSettingsAppId);
211 } 169 }
212 170
213 bool LaunchAppWithRect(content::BrowserContext* context, 171 bool LaunchAppWithRect(content::BrowserContext* context,
214 const std::string& app_id, 172 const std::string& app_id,
215 const gfx::Rect& target_rect, 173 const gfx::Rect& target_rect) {
216 int event_flags) {
217 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(context); 174 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(context);
218 CHECK(prefs); 175 CHECK(prefs);
219 176
220 std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id); 177 std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id);
221 if (!app_info) { 178 if (!app_info) {
222 VLOG(2) << "Cannot launch unavailable app: " << app_id << "."; 179 VLOG(2) << "Cannot launch unavailable app: " << app_id << ".";
223 return false; 180 return false;
224 } 181 }
225 182
226 if (!app_info->ready) { 183 if (!app_info->ready) {
227 VLOG(2) << "Cannot launch not-ready app: " << app_id << "."; 184 VLOG(2) << "Cannot launch not-ready app: " << app_id << ".";
228 return false; 185 return false;
229 } 186 }
230 187
231 if (!app_info->launchable) { 188 if (!app_info->launchable) {
232 VLOG(2) << "Cannot launch non-launchable app: " << app_id << "."; 189 VLOG(2) << "Cannot launch non-launchable app: " << app_id << ".";
233 return false; 190 return false;
234 } 191 }
235 192
236 arc::mojom::AppInstance* app_instance = 193 arc::mojom::AppInstance* app_instance =
237 GetAppInstance(kMinVersion, kLaunchAppStr); 194 GetAppInstance(kMinVersion, kLaunchAppStr);
238 if (!app_instance) 195 if (!app_instance)
239 return false; 196 return false;
240 197
241 arc::mojom::IntentHelperInstance* intent_helper_instance =
242 GetIntentHelperInstance(kSendBroadcastMinVersion, kSendBroadcastStr);
243 if (intent_helper_instance) {
244 base::DictionaryValue extras;
245 extras.SetBoolean("inTouchMode", IsMouseOrTouchEventFromFlags(event_flags));
246 std::string extras_string;
247 base::JSONWriter::Write(extras, &extras_string);
248 intent_helper_instance->SendBroadcast(
249 kSetInTouchModeIntent, kIntentHelperPackageName, kIntentHelperClassName,
250 extras_string);
251 }
252
253 if (app_info->shortcut) { 198 if (app_info->shortcut) {
254 app_instance->LaunchIntent(app_info->intent_uri, target_rect); 199 app_instance->LaunchIntent(app_info->intent_uri, target_rect);
255 } else { 200 } else {
256 app_instance->LaunchApp(app_info->package_name, app_info->activity, 201 app_instance->LaunchApp(app_info->package_name, app_info->activity,
257 target_rect); 202 target_rect);
258 } 203 }
259 prefs->SetLastLaunchTime(app_id, base::Time::Now()); 204 prefs->SetLastLaunchTime(app_id, base::Time::Now());
260 205
261 return true; 206 return true;
262 } 207 }
263 208
264 bool LaunchAndroidSettingsApp(content::BrowserContext* context, 209 bool LaunchAndroidSettingsApp(content::BrowserContext* context) {
265 int event_flags) {
266 constexpr bool kUseLandscapeLayout = true; 210 constexpr bool kUseLandscapeLayout = true;
267 return arc::LaunchApp(context, kSettingsAppId, kUseLandscapeLayout, 211 return arc::LaunchApp(context, kSettingsAppId, kUseLandscapeLayout);
268 event_flags); 212 }
213
214 bool LaunchApp(content::BrowserContext* context, const std::string& app_id) {
215 return LaunchApp(context, app_id, true);
269 } 216 }
270 217
271 bool LaunchApp(content::BrowserContext* context, 218 bool LaunchApp(content::BrowserContext* context,
272 const std::string& app_id, 219 const std::string& app_id,
273 int event_flags) { 220 bool landscape_layout) {
274 constexpr bool kUseLandscapeLayout = true;
275 return LaunchApp(context, app_id, kUseLandscapeLayout, event_flags);
276 }
277
278 bool LaunchApp(content::BrowserContext* context,
279 const std::string& app_id,
280 bool landscape_layout,
281 int event_flags) {
282 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(context); 221 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(context);
283 std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id); 222 std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id);
284 if (app_info && !app_info->ready) { 223 if (app_info && !app_info->ready) {
285 ArcSessionManager* arc_session_manager = ArcSessionManager::Get(); 224 ArcSessionManager* arc_session_manager = ArcSessionManager::Get();
286 DCHECK(arc_session_manager); 225 DCHECK(arc_session_manager);
287 226
288 bool arc_activated = false; 227 bool arc_activated = false;
289 if (!arc_session_manager->IsArcEnabled()) { 228 if (!arc_session_manager->IsArcEnabled()) {
290 if (!prefs->IsDefault(app_id)) { 229 if (!prefs->IsDefault(app_id)) {
291 NOTREACHED(); 230 NOTREACHED();
(...skipping 10 matching lines...) Expand all
302 241
303 // PlayStore item has special handling for shelf controllers. In order to 242 // PlayStore item has special handling for shelf controllers. In order to
304 // avoid unwanted initial animation for PlayStore item do not create 243 // avoid unwanted initial animation for PlayStore item do not create
305 // deferred launch request when PlayStore item enables Arc. 244 // deferred launch request when PlayStore item enables Arc.
306 if (!arc_activated || app_id != kPlayStoreAppId) { 245 if (!arc_activated || app_id != kPlayStoreAppId) {
307 ChromeLauncherController* chrome_controller = 246 ChromeLauncherController* chrome_controller =
308 ChromeLauncherController::instance(); 247 ChromeLauncherController::instance();
309 DCHECK(chrome_controller || !ash::Shell::HasInstance()); 248 DCHECK(chrome_controller || !ash::Shell::HasInstance());
310 if (chrome_controller) { 249 if (chrome_controller) {
311 chrome_controller->GetArcDeferredLauncher()->RegisterDeferredLaunch( 250 chrome_controller->GetArcDeferredLauncher()->RegisterDeferredLaunch(
312 app_id, event_flags); 251 app_id);
313 252
314 // On some boards, ARC is booted with a restricted set of resources by 253 // On some boards, ARC is booted with a restricted set of resources by
315 // default to avoid slowing down Chrome's user session restoration. 254 // default to avoid slowing down Chrome's user session restoration.
316 // However, the restriction should be lifted once the user explicitly 255 // However, the restriction should be lifted once the user explicitly
317 // tries to launch an ARC app. 256 // tries to launch an ARC app.
318 VLOG(2) << "Prioritizing the instance"; 257 VLOG(2) << "Prioritizing the instance";
319 chromeos::SessionManagerClient* session_manager_client = 258 chromeos::SessionManagerClient* session_manager_client =
320 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(); 259 chromeos::DBusThreadManager::Get()->GetSessionManagerClient();
321 session_manager_client->PrioritizeArcInstance( 260 session_manager_client->PrioritizeArcInstance(
322 base::Bind(PrioritizeArcInstanceCallback)); 261 base::Bind(PrioritizeArcInstanceCallback));
323 } 262 }
324 } 263 }
325 prefs->SetLastLaunchTime(app_id, base::Time::Now()); 264 prefs->SetLastLaunchTime(app_id, base::Time::Now());
326 return true; 265 return true;
327 } 266 }
328 267
329 return (new LaunchAppWithoutSize(context, app_id, landscape_layout, 268 return (new LaunchAppWithoutSize(context, app_id, landscape_layout))
330 event_flags))
331 ->LaunchAndRelease(); 269 ->LaunchAndRelease();
332 } 270 }
333 271
334 void SetTaskActive(int task_id) { 272 void SetTaskActive(int task_id) {
335 arc::mojom::AppInstance* app_instance = 273 arc::mojom::AppInstance* app_instance =
336 GetAppInstance(kTaskSupportMinVersion, kSetActiveTaskStr); 274 GetAppInstance(kTaskSupportMinVersion, kSetActiveTaskStr);
337 if (!app_instance) 275 if (!app_instance)
338 return; 276 return;
339 app_instance->SetTaskActive(task_id); 277 app_instance->SetTaskActive(task_id);
340 } 278 }
341 279
342 void CloseTask(int task_id) { 280 void CloseTask(int task_id) {
343 arc::mojom::AppInstance* app_instance = 281 arc::mojom::AppInstance* app_instance =
344 GetAppInstance(kTaskSupportMinVersion, kCloseTaskStr); 282 GetAppInstance(kTaskSupportMinVersion, kCloseTaskStr);
345 if (!app_instance) 283 if (!app_instance)
346 return; 284 return;
347 app_instance->CloseTask(task_id); 285 app_instance->CloseTask(task_id);
348 } 286 }
349 287
350 void ShowTalkBackSettings() { 288 void ShowTalkBackSettings() {
351 arc::mojom::IntentHelperInstance* intent_helper_instance = 289 arc::ArcBridgeService* bridge_service = arc::ArcBridgeService::Get();
352 GetIntentHelperInstance(kSendBroadcastMinVersion, kSendBroadcastStr); 290 if (!bridge_service) {
291 VLOG(2) << "ARC bridge is not ready";
292 return;
293 }
294
295 auto* intent_helper_instance =
296 bridge_service->intent_helper()->GetInstanceForMethod(
297 "SendBroadcast", kSendBroadcastMinVersion);
353 if (!intent_helper_instance) 298 if (!intent_helper_instance)
354 return; 299 return;
355 300
356 intent_helper_instance->SendBroadcast(kShowTalkbackSettingsIntent, 301 intent_helper_instance->SendBroadcast(
357 kIntentHelperPackageName, 302 "org.chromium.arc.intent_helper.SHOW_TALKBACK_SETTINGS",
358 kIntentHelperClassName, "{}"); 303 "org.chromium.arc.intent_helper",
304 "org.chromium.arc.intent_helper.SettingsReceiver",
305 "{}");
359 } 306 }
360 307
361 bool CanHandleResolution(content::BrowserContext* context, 308 bool CanHandleResolution(content::BrowserContext* context,
362 const std::string& app_id, 309 const std::string& app_id,
363 const gfx::Rect& rect, 310 const gfx::Rect& rect,
364 const CanHandleResolutionCallback& callback) { 311 const CanHandleResolutionCallback& callback) {
365 const ArcAppListPrefs* prefs = ArcAppListPrefs::Get(context); 312 const ArcAppListPrefs* prefs = ArcAppListPrefs::Get(context);
366 DCHECK(prefs); 313 DCHECK(prefs);
367 std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id); 314 std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id);
368 if (!app_info) { 315 if (!app_info) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 if (!app_instance) 373 if (!app_instance)
427 return false; 374 return false;
428 375
429 app_instance->ShowPackageInfoOnPage( 376 app_instance->ShowPackageInfoOnPage(
430 package_name, page, 377 package_name, page,
431 GetTargetRect(gfx::Size(kNexus7Width, kNexus7Height))); 378 GetTargetRect(gfx::Size(kNexus7Width, kNexus7Height)));
432 return true; 379 return true;
433 } 380 }
434 381
435 } // namespace arc 382 } // namespace arc
OLDNEW
« no previous file with comments | « chrome/browser/ui/app_list/arc/arc_app_utils.h ('k') | chrome/browser/ui/app_list/search/arc_app_result.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698