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

Side by Side Diff: apps/launcher.cc

Issue 2212303003: Implement app launch changes for app runtime extension proposal. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@tool-screenshot
Patch Set: Fix compile Created 4 years, 4 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 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 "apps/launcher.h" 5 #include "apps/launcher.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 // has outstanding tasks on a message queue it will be retained; once all 92 // has outstanding tasks on a message queue it will be retained; once all
93 // outstanding tasks are completed it will be deleted. 93 // outstanding tasks are completed it will be deleted.
94 class PlatformAppPathLauncher 94 class PlatformAppPathLauncher
95 : public base::RefCountedThreadSafe<PlatformAppPathLauncher> { 95 : public base::RefCountedThreadSafe<PlatformAppPathLauncher> {
96 public: 96 public:
97 PlatformAppPathLauncher(Profile* profile, 97 PlatformAppPathLauncher(Profile* profile,
98 const Extension* extension, 98 const Extension* extension,
99 const std::vector<base::FilePath>& entry_paths) 99 const std::vector<base::FilePath>& entry_paths)
100 : profile_(profile), 100 : profile_(profile),
101 extension_id(extension->id()), 101 extension_id(extension->id()),
102 action_data_(),
Daniel Erat 2016/08/10 22:19:24 nit: leave this out? (i'm guessing it has a defaul
102 entry_paths_(entry_paths), 103 entry_paths_(entry_paths),
103 mime_type_collector_(profile), 104 mime_type_collector_(profile),
104 is_directory_collector_(profile) {} 105 is_directory_collector_(profile) {}
105 106
106 PlatformAppPathLauncher(Profile* profile, 107 PlatformAppPathLauncher(Profile* profile,
107 const Extension* extension, 108 const Extension* extension,
108 const base::FilePath& file_path) 109 const base::FilePath& file_path)
109 : profile_(profile), 110 : profile_(profile),
110 extension_id(extension->id()), 111 extension_id(extension->id()),
112 action_data_(),
Daniel Erat 2016/08/10 22:19:24 nit: ditto
111 mime_type_collector_(profile), 113 mime_type_collector_(profile),
112 is_directory_collector_(profile) { 114 is_directory_collector_(profile) {
113 if (!file_path.empty()) 115 if (!file_path.empty())
114 entry_paths_.push_back(file_path); 116 entry_paths_.push_back(file_path);
115 } 117 }
116 118
119 void set_action_data(extensions::ActionData action_data) {
120 action_data_ = action_data;
121 }
122
123 void set_launch_source(extensions::AppLaunchSource launch_source) {
124 launch_source_ = launch_source;
125 }
126
117 void Launch() { 127 void Launch() {
118 DCHECK_CURRENTLY_ON(BrowserThread::UI); 128 DCHECK_CURRENTLY_ON(BrowserThread::UI);
119 129
120 const Extension* extension = GetExtension(); 130 const Extension* extension = GetExtension();
121 if (!extension) 131 if (!extension)
122 return; 132 return;
123 133
124 if (entry_paths_.empty()) { 134 if (entry_paths_.empty()) {
125 LaunchWithNoLaunchData(); 135 LaunchWithNoLaunchData();
126 return; 136 return;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 199
190 void LaunchWithNoLaunchData() { 200 void LaunchWithNoLaunchData() {
191 // This method is required as an entry point on the UI thread. 201 // This method is required as an entry point on the UI thread.
192 DCHECK_CURRENTLY_ON(BrowserThread::UI); 202 DCHECK_CURRENTLY_ON(BrowserThread::UI);
193 203
194 const Extension* extension = GetExtension(); 204 const Extension* extension = GetExtension();
195 if (!extension) 205 if (!extension)
196 return; 206 return;
197 207
198 AppRuntimeEventRouter::DispatchOnLaunchedEvent( 208 AppRuntimeEventRouter::DispatchOnLaunchedEvent(
199 profile_, extension, extensions::SOURCE_FILE_HANDLER); 209 profile_, extension, launch_source_, action_data_);
200 } 210 }
201 211
202 void OnAreDirectoriesCollected( 212 void OnAreDirectoriesCollected(
203 bool has_file_system_write_permission, 213 bool has_file_system_write_permission,
204 std::unique_ptr<std::set<base::FilePath>> directory_paths) { 214 std::unique_ptr<std::set<base::FilePath>> directory_paths) {
205 if (has_file_system_write_permission) { 215 if (has_file_system_write_permission) {
206 std::set<base::FilePath>* const directory_paths_ptr = 216 std::set<base::FilePath>* const directory_paths_ptr =
207 directory_paths.get(); 217 directory_paths.get();
208 PrepareFilesForWritableApp( 218 PrepareFilesForWritableApp(
209 entry_paths_, profile_, *directory_paths_ptr, 219 entry_paths_, profile_, *directory_paths_ptr,
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 } 313 }
304 314
305 std::vector<GrantedFileEntry> granted_entries; 315 std::vector<GrantedFileEntry> granted_entries;
306 for (size_t i = 0; i < entry_paths_.size(); ++i) { 316 for (size_t i = 0; i < entry_paths_.size(); ++i) {
307 granted_entries.push_back(CreateFileEntry( 317 granted_entries.push_back(CreateFileEntry(
308 profile_, extension, host->render_process_host()->GetID(), 318 profile_, extension, host->render_process_host()->GetID(),
309 entries_[i].path, entries_[i].is_directory)); 319 entries_[i].path, entries_[i].is_directory));
310 } 320 }
311 321
312 AppRuntimeEventRouter::DispatchOnLaunchedEventWithFileEntries( 322 AppRuntimeEventRouter::DispatchOnLaunchedEventWithFileEntries(
313 profile_, extension, handler_id_, entries_, granted_entries); 323 profile_, extension, launch_source_, handler_id_, entries_,
324 granted_entries, action_data_);
314 } 325 }
315 326
316 const Extension* GetExtension() const { 327 const Extension* GetExtension() const {
317 return extensions::ExtensionRegistry::Get(profile_)->GetExtensionById( 328 return extensions::ExtensionRegistry::Get(profile_)->GetExtensionById(
318 extension_id, extensions::ExtensionRegistry::EVERYTHING); 329 extension_id, extensions::ExtensionRegistry::EVERYTHING);
319 } 330 }
320 331
321 // The profile the app should be run in. 332 // The profile the app should be run in.
322 Profile* profile_; 333 Profile* profile_;
323 // The id of the extension providing the app. A pointer to the extension is 334 // The id of the extension providing the app. A pointer to the extension is
324 // not kept as the extension may be unloaded and deleted during the course of 335 // not kept as the extension may be unloaded and deleted during the course of
325 // the launch. 336 // the launch.
326 const std::string extension_id; 337 const std::string extension_id;
338 extensions::AppLaunchSource launch_source_ = extensions::SOURCE_FILE_HANDLER;
339 base::Optional<extensions::ActionData> action_data_;
327 // A list of files and directories to be passed through to the app. 340 // A list of files and directories to be passed through to the app.
328 std::vector<base::FilePath> entry_paths_; 341 std::vector<base::FilePath> entry_paths_;
329 // A corresponding list with EntryInfo for every base::FilePath in 342 // A corresponding list with EntryInfo for every base::FilePath in
330 // entry_paths_. 343 // entry_paths_.
331 std::vector<extensions::EntryInfo> entries_; 344 std::vector<extensions::EntryInfo> entries_;
332 // The ID of the file handler used to launch the app. 345 // The ID of the file handler used to launch the app.
333 std::string handler_id_; 346 std::string handler_id_;
334 extensions::app_file_handler_util::MimeTypeCollector mime_type_collector_; 347 extensions::app_file_handler_util::MimeTypeCollector mime_type_collector_;
335 extensions::app_file_handler_util::IsDirectoryCollector 348 extensions::app_file_handler_util::IsDirectoryCollector
336 is_directory_collector_; 349 is_directory_collector_;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 #else 381 #else
369 base::CommandLine::StringType about_blank_url(url::kAboutBlankURL); 382 base::CommandLine::StringType about_blank_url(url::kAboutBlankURL);
370 #endif 383 #endif
371 base::CommandLine::StringVector args = command_line.GetArgs(); 384 base::CommandLine::StringVector args = command_line.GetArgs();
372 // Browser tests will add about:blank to the command line. This should 385 // Browser tests will add about:blank to the command line. This should
373 // never be interpreted as a file to open, as doing so with an app that 386 // never be interpreted as a file to open, as doing so with an app that
374 // has write access will result in a file 'about' being created, which 387 // has write access will result in a file 'about' being created, which
375 // causes problems on the bots. 388 // causes problems on the bots.
376 if (args.empty() || (command_line.HasSwitch(switches::kTestType) && 389 if (args.empty() || (command_line.HasSwitch(switches::kTestType) &&
377 args[0] == about_blank_url)) { 390 args[0] == about_blank_url)) {
378 AppRuntimeEventRouter::DispatchOnLaunchedEvent(profile, extension, source); 391 AppRuntimeEventRouter::DispatchOnLaunchedEvent(
392 profile, extension, source, base::Optional<extensions::ActionData>());
379 return; 393 return;
380 } 394 }
381 395
382 base::FilePath file_path(command_line.GetArgs()[0]); 396 base::FilePath file_path(command_line.GetArgs()[0]);
383 scoped_refptr<PlatformAppPathLauncher> launcher = 397 scoped_refptr<PlatformAppPathLauncher> launcher =
384 new PlatformAppPathLauncher(profile, extension, file_path); 398 new PlatformAppPathLauncher(profile, extension, file_path);
385 launcher->LaunchWithRelativePath(current_directory); 399 launcher->LaunchWithRelativePath(current_directory);
386 } 400 }
387 401
388 void LaunchPlatformAppWithPath(Profile* profile, 402 void LaunchPlatformAppWithPath(Profile* profile,
389 const Extension* extension, 403 const Extension* extension,
390 const base::FilePath& file_path) { 404 const base::FilePath& file_path) {
391 scoped_refptr<PlatformAppPathLauncher> launcher = 405 scoped_refptr<PlatformAppPathLauncher> launcher =
392 new PlatformAppPathLauncher(profile, extension, file_path); 406 new PlatformAppPathLauncher(profile, extension, file_path);
393 launcher->Launch(); 407 launcher->Launch();
394 } 408 }
395 409
410 void LaunchPlatformAppWithAction(Profile* profile,
411 const extensions::Extension* extension,
412 extensions::ActionData action_data,
413 const base::FilePath& file_path) {
414 scoped_refptr<PlatformAppPathLauncher> launcher =
415 new PlatformAppPathLauncher(profile, extension, file_path);
416 launcher->set_action_data(action_data);
417 launcher->set_launch_source(extensions::AppLaunchSource::SOURCE_UNTRACKED);
418 launcher->Launch();
419 }
420
396 void LaunchPlatformApp(Profile* profile, 421 void LaunchPlatformApp(Profile* profile,
397 const Extension* extension, 422 const Extension* extension,
398 extensions::AppLaunchSource source) { 423 extensions::AppLaunchSource source) {
399 LaunchPlatformAppWithCommandLine( 424 LaunchPlatformAppWithCommandLine(
400 profile, 425 profile,
401 extension, 426 extension,
402 base::CommandLine(base::CommandLine::NO_PROGRAM), 427 base::CommandLine(base::CommandLine::NO_PROGRAM),
403 base::FilePath(), 428 base::FilePath(),
404 source); 429 source);
405 } 430 }
(...skipping 22 matching lines...) Expand all
428 extensions::ExtensionPrefs* extension_prefs = 453 extensions::ExtensionPrefs* extension_prefs =
429 extensions::ExtensionPrefs::Get(profile); 454 extensions::ExtensionPrefs::Get(profile);
430 bool had_windows = extension_prefs->IsActive(extension->id()); 455 bool had_windows = extension_prefs->IsActive(extension->id());
431 extension_prefs->SetIsActive(extension->id(), false); 456 extension_prefs->SetIsActive(extension->id(), false);
432 bool listening_to_launch = event_router-> 457 bool listening_to_launch = event_router->
433 ExtensionHasEventListener(extension->id(), 458 ExtensionHasEventListener(extension->id(),
434 app_runtime::OnLaunched::kEventName); 459 app_runtime::OnLaunched::kEventName);
435 460
436 if (listening_to_launch && had_windows) { 461 if (listening_to_launch && had_windows) {
437 AppRuntimeEventRouter::DispatchOnLaunchedEvent( 462 AppRuntimeEventRouter::DispatchOnLaunchedEvent(
438 profile, extension, extensions::SOURCE_RESTART); 463 profile, extension, extensions::SOURCE_RESTART,
464 base::Optional<extensions::ActionData>());
439 } 465 }
440 } 466 }
441 467
442 void LaunchPlatformAppWithUrl(Profile* profile, 468 void LaunchPlatformAppWithUrl(Profile* profile,
443 const Extension* extension, 469 const Extension* extension,
444 const std::string& handler_id, 470 const std::string& handler_id,
445 const GURL& url, 471 const GURL& url,
446 const GURL& referrer_url) { 472 const GURL& referrer_url) {
447 AppRuntimeEventRouter::DispatchOnLaunchedEventWithUrl( 473 AppRuntimeEventRouter::DispatchOnLaunchedEventWithUrl(
448 profile, extension, handler_id, url, referrer_url); 474 profile, extension, handler_id, url, referrer_url);
449 } 475 }
450 476
451 } // namespace apps 477 } // namespace apps
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698