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

Side by Side Diff: shell/application_manager/application_manager.cc

Issue 1467263002: Fix URL duplication when SetArgsForURL is called mutliple times. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Follow review Created 5 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
« no previous file with comments | « no previous file | shell/application_manager/application_manager_unittest.cc » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "shell/application_manager/application_manager.h" 5 #include "shell/application_manager/application_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 27 matching lines...) Expand all
38 const std::vector<std::string>& v2) { 38 const std::vector<std::string>& v2) {
39 if (!v1.size()) 39 if (!v1.size())
40 return v2; 40 return v2;
41 if (!v2.size()) 41 if (!v2.size())
42 return v1; 42 return v1;
43 std::vector<std::string> result(v1); 43 std::vector<std::string> result(v1);
44 result.insert(result.end(), v1.begin(), v1.end()); 44 result.insert(result.end(), v1.begin(), v1.end());
45 return result; 45 return result;
46 } 46 }
47 47
48 void AppendArgsForURL(const GURL& url,
49 const std::vector<std::string>& args,
50 std::vector<std::string>* target) {
51 if (target->empty())
52 target->push_back(url.spec());
53 target->insert(target->end(), args.begin(), args.end());
54 }
55
48 } // namespace 56 } // namespace
49 57
50 class ApplicationManager::ContentHandlerConnection { 58 class ApplicationManager::ContentHandlerConnection {
51 public: 59 public:
52 ContentHandlerConnection(ApplicationManager* manager, Identity identity) 60 ContentHandlerConnection(ApplicationManager* manager, Identity identity)
53 : manager_(manager), identity_(identity) { 61 : manager_(manager), identity_(identity) {
54 ServiceProviderPtr services; 62 ServiceProviderPtr services;
55 manager->ConnectToApplication(identity_.url, GURL(), 63 manager->ConnectToApplication(identity_.url, GURL(),
56 mojo::GetProxy(&services), nullptr, 64 mojo::GetProxy(&services), nullptr,
57 base::Closure()); 65 base::Closure());
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 458
451 void ApplicationManager::SetLoaderForScheme( 459 void ApplicationManager::SetLoaderForScheme(
452 scoped_ptr<ApplicationLoader> loader, 460 scoped_ptr<ApplicationLoader> loader,
453 const std::string& scheme) { 461 const std::string& scheme) {
454 scheme_to_loader_[scheme] = loader.Pass(); 462 scheme_to_loader_[scheme] = loader.Pass();
455 } 463 }
456 464
457 void ApplicationManager::SetArgsForURL(const std::vector<std::string>& args, 465 void ApplicationManager::SetArgsForURL(const std::vector<std::string>& args,
458 const GURL& url) { 466 const GURL& url) {
459 GURL base_url = GetBaseURLAndQuery(url, nullptr); 467 GURL base_url = GetBaseURLAndQuery(url, nullptr);
460 url_to_args_[base_url].insert(url_to_args_[base_url].end(), args.begin(), 468 AppendArgsForURL(base_url, args, &url_to_args_[base_url]);
461 args.end());
462 GURL mapped_url = delegate_->ResolveMappings(base_url); 469 GURL mapped_url = delegate_->ResolveMappings(base_url);
463 DCHECK(!mapped_url.has_query()); 470 DCHECK(!mapped_url.has_query());
464 if (mapped_url != url) { 471 if (mapped_url != base_url)
465 url_to_args_[mapped_url].insert(url_to_args_[mapped_url].end(), 472 AppendArgsForURL(mapped_url, args, &url_to_args_[mapped_url]);
466 args.begin(), args.end());
467 }
468 GURL resolved_url = delegate_->ResolveMojoURL(mapped_url); 473 GURL resolved_url = delegate_->ResolveMojoURL(mapped_url);
469 DCHECK(!resolved_url.has_query()); 474 DCHECK(!resolved_url.has_query());
470 if (resolved_url != mapped_url) { 475 if (resolved_url != mapped_url)
471 url_to_args_[resolved_url].insert(url_to_args_[resolved_url].end(), 476 AppendArgsForURL(resolved_url, args, &url_to_args_[resolved_url]);
472 args.begin(), args.end());
473 }
474 } 477 }
475 478
476 NativeApplicationOptions* ApplicationManager::GetNativeApplicationOptionsForURL( 479 NativeApplicationOptions* ApplicationManager::GetNativeApplicationOptionsForURL(
477 const GURL& url) { 480 const GURL& url) {
478 DCHECK(!url.has_query()); // Precondition. 481 DCHECK(!url.has_query()); // Precondition.
479 // Apply mappings and resolution to get the resolved URL. 482 // Apply mappings and resolution to get the resolved URL.
480 GURL resolved_url = 483 GURL resolved_url =
481 delegate_->ResolveMojoURL(delegate_->ResolveMappings(url)); 484 delegate_->ResolveMojoURL(delegate_->ResolveMappings(url));
482 // TODO(vtl): We should probably also remove/disregard the query string (and 485 // TODO(vtl): We should probably also remove/disregard the query string (and
483 // maybe canonicalize in other ways). 486 // maybe canonicalize in other ways).
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 return args_it->second; 536 return args_it->second;
534 return std::vector<std::string>(); 537 return std::vector<std::string>();
535 } 538 }
536 539
537 void ApplicationManager::CleanupRunner(NativeRunner* runner) { 540 void ApplicationManager::CleanupRunner(NativeRunner* runner) {
538 native_runners_.erase( 541 native_runners_.erase(
539 std::find(native_runners_.begin(), native_runners_.end(), runner)); 542 std::find(native_runners_.begin(), native_runners_.end(), runner));
540 } 543 }
541 544
542 } // namespace shell 545 } // namespace shell
OLDNEW
« no previous file with comments | « no previous file | shell/application_manager/application_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698