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

Side by Side Diff: extensions/common/features/simple_feature.cc

Issue 2241203003: Pass user session type to extension feature checks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: split out some stuff 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 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 "extensions/common/features/simple_feature.h" 5 #include "extensions/common/features/simple_feature.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 27 matching lines...) Expand all
38 const std::string& extension_id, 38 const std::string& extension_id,
39 Manifest::Type type, 39 Manifest::Type type,
40 Manifest::Location location, 40 Manifest::Location location,
41 int manifest_version, 41 int manifest_version,
42 Feature::Platform platform, 42 Feature::Platform platform,
43 const Feature* feature) { 43 const Feature* feature) {
44 return feature->IsAvailableToManifest( 44 return feature->IsAvailableToManifest(
45 extension_id, type, location, manifest_version, platform); 45 extension_id, type, location, manifest_version, platform);
46 } 46 }
47 47
48 Feature::Availability IsAvailableToContextForBind(const Extension* extension, 48 Feature::Availability IsAvailableToContextForBind(
49 Feature::Context context, 49 const Extension* extension,
50 const GURL& url, 50 Feature::Context context,
51 Feature::Platform platform, 51 Feature::SessionType session_type,
52 const Feature* feature) { 52 const GURL& url,
53 return feature->IsAvailableToContext(extension, context, url, platform); 53 Feature::Platform platform,
54 const Feature* feature) {
55 return feature->IsAvailableToContext(extension, context, session_type, url,
56 platform);
54 } 57 }
55 58
56 // TODO(aa): Can we replace all this manual parsing with JSON schema stuff? 59 // TODO(aa): Can we replace all this manual parsing with JSON schema stuff?
57 60
58 void ParseVector(const base::Value* value, 61 void ParseVector(const base::Value* value,
59 std::vector<std::string>* vector) { 62 std::vector<std::string>* vector) {
60 const base::ListValue* list_value = NULL; 63 const base::ListValue* list_value = NULL;
61 if (!value->GetAsList(&list_value)) 64 if (!value->GetAsList(&list_value))
62 return; 65 return;
63 66
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 return CheckDependencies(base::Bind(&IsAvailableToManifestForBind, 444 return CheckDependencies(base::Bind(&IsAvailableToManifestForBind,
442 extension_id, 445 extension_id,
443 type, 446 type,
444 location, 447 location,
445 manifest_version, 448 manifest_version,
446 platform)); 449 platform));
447 } 450 }
448 451
449 Feature::Availability SimpleFeature::IsAvailableToContext( 452 Feature::Availability SimpleFeature::IsAvailableToContext(
450 const Extension* extension, 453 const Extension* extension,
451 SimpleFeature::Context context, 454 Feature::Context context,
455 Feature::SessionType session_type,
452 const GURL& url, 456 const GURL& url,
453 SimpleFeature::Platform platform) const { 457 SimpleFeature::Platform platform) const {
454 if (extension) { 458 if (extension) {
455 Availability result = IsAvailableToManifest(extension->id(), 459 Availability result = IsAvailableToManifest(extension->id(),
456 extension->GetType(), 460 extension->GetType(),
457 extension->location(), 461 extension->location(),
458 extension->manifest_version(), 462 extension->manifest_version(),
459 platform); 463 platform);
460 if (!result.is_available()) 464 if (!result.is_available())
461 return result; 465 return result;
462 } 466 }
463 467
464 // TODO(lazyboy): This isn't quite right for Extension Service Worker 468 // TODO(lazyboy): This isn't quite right for Extension Service Worker
465 // extension API calls, since there's no guarantee that the extension is 469 // extension API calls, since there's no guarantee that the extension is
466 // "active" in current renderer process when the API permission check is 470 // "active" in current renderer process when the API permission check is
467 // done. 471 // done.
468 if (!contexts_.empty() && !base::ContainsValue(contexts_, context)) 472 if (!contexts_.empty() && !base::ContainsValue(contexts_, context))
469 return CreateAvailability(INVALID_CONTEXT, context); 473 return CreateAvailability(INVALID_CONTEXT, context);
470 474
471 // TODO(kalman): Consider checking |matches_| regardless of context type. 475 // TODO(kalman): Consider checking |matches_| regardless of context type.
472 // Fewer surprises, and if the feature configuration wants to isolate 476 // Fewer surprises, and if the feature configuration wants to isolate
473 // "matches" from say "blessed_extension" then they can use complex features. 477 // "matches" from say "blessed_extension" then they can use complex features.
474 if ((context == WEB_PAGE_CONTEXT || context == WEBUI_CONTEXT) && 478 if ((context == WEB_PAGE_CONTEXT || context == WEBUI_CONTEXT) &&
475 !matches_.MatchesURL(url)) { 479 !matches_.MatchesURL(url)) {
476 return CreateAvailability(INVALID_URL, url); 480 return CreateAvailability(INVALID_URL, url);
477 } 481 }
478 482
479 // TODO(kalman): Assert that if the context was a webpage or WebUI context 483 // TODO(kalman): Assert that if the context was a webpage or WebUI context
480 // then at some point a "matches" restriction was checked. 484 // then at some point a "matches" restriction was checked.
481 return CheckDependencies(base::Bind( 485 return CheckDependencies(base::Bind(&IsAvailableToContextForBind, extension,
482 &IsAvailableToContextForBind, extension, context, url, platform)); 486 context, session_type, url, platform));
483 } 487 }
484 488
485 std::string SimpleFeature::GetAvailabilityMessage( 489 std::string SimpleFeature::GetAvailabilityMessage(
486 AvailabilityResult result, 490 AvailabilityResult result,
487 Manifest::Type type, 491 Manifest::Type type,
488 const GURL& url, 492 const GURL& url,
489 Context context, 493 Context context,
490 version_info::Channel channel) const { 494 version_info::Channel channel) const {
491 switch (result) { 495 switch (result) {
492 case IS_AVAILABLE: 496 case IS_AVAILABLE:
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 void SimpleFeature::set_platforms(std::initializer_list<Platform> platforms) { 705 void SimpleFeature::set_platforms(std::initializer_list<Platform> platforms) {
702 platforms_ = platforms; 706 platforms_ = platforms;
703 } 707 }
704 708
705 void SimpleFeature::set_whitelist( 709 void SimpleFeature::set_whitelist(
706 std::initializer_list<const char* const> whitelist) { 710 std::initializer_list<const char* const> whitelist) {
707 whitelist_.assign(whitelist.begin(), whitelist.end()); 711 whitelist_.assign(whitelist.begin(), whitelist.end());
708 } 712 }
709 713
710 } // namespace extensions 714 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698