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

Side by Side Diff: chrome/renderer/content_settings_observer.cc

Issue 464693002: ifdef extensions bits in ContentSettingsObserver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/renderer/content_settings_observer.h" 5 #include "chrome/renderer/content_settings_observer.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "chrome/common/chrome_switches.h" 9 #include "chrome/common/chrome_switches.h"
10 #include "chrome/common/render_messages.h" 10 #include "chrome/common/render_messages.h"
11 #include "chrome/common/url_constants.h" 11 #include "chrome/common/url_constants.h"
12 #include "content/public/renderer/document_state.h" 12 #include "content/public/renderer/document_state.h"
13 #include "content/public/renderer/navigation_state.h" 13 #include "content/public/renderer/navigation_state.h"
14 #include "content/public/renderer/render_frame.h" 14 #include "content/public/renderer/render_frame.h"
15 #include "content/public/renderer/render_view.h" 15 #include "content/public/renderer/render_view.h"
16 #include "extensions/common/constants.h"
17 #include "extensions/common/extension.h"
18 #include "extensions/common/permissions/permissions_data.h"
19 #include "extensions/renderer/dispatcher.h"
20 #include "third_party/WebKit/public/platform/WebPermissionCallbacks.h" 16 #include "third_party/WebKit/public/platform/WebPermissionCallbacks.h"
21 #include "third_party/WebKit/public/platform/WebURL.h" 17 #include "third_party/WebKit/public/platform/WebURL.h"
22 #include "third_party/WebKit/public/web/WebDataSource.h" 18 #include "third_party/WebKit/public/web/WebDataSource.h"
23 #include "third_party/WebKit/public/web/WebDocument.h" 19 #include "third_party/WebKit/public/web/WebDocument.h"
24 #include "third_party/WebKit/public/web/WebFrame.h" 20 #include "third_party/WebKit/public/web/WebFrame.h"
25 #include "third_party/WebKit/public/web/WebFrameClient.h" 21 #include "third_party/WebKit/public/web/WebFrameClient.h"
26 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" 22 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
27 #include "third_party/WebKit/public/web/WebView.h" 23 #include "third_party/WebKit/public/web/WebView.h"
28 24
29 #if defined(ENABLE_EXTENSIONS) 25 #if defined(ENABLE_EXTENSIONS)
30 #include "chrome/common/extensions/chrome_extension_messages.h" 26 #include "chrome/common/extensions/chrome_extension_messages.h"
27 #include "extensions/common/constants.h"
28 #include "extensions/common/extension.h"
29 #include "extensions/common/permissions/permissions_data.h"
Devlin 2014/08/12 15:34:59 Doesn't actually look like we use this at first gl
Lei Zhang 2014/08/12 23:03:17 deleted
30 #include "extensions/renderer/dispatcher.h"
31 #endif 31 #endif
32 32
33 using blink::WebDataSource; 33 using blink::WebDataSource;
34 using blink::WebDocument; 34 using blink::WebDocument;
35 using blink::WebFrame; 35 using blink::WebFrame;
36 using blink::WebPermissionCallbacks; 36 using blink::WebPermissionCallbacks;
37 using blink::WebSecurityOrigin; 37 using blink::WebSecurityOrigin;
38 using blink::WebString; 38 using blink::WebString;
39 using blink::WebURL; 39 using blink::WebURL;
40 using blink::WebView; 40 using blink::WebView;
41 using content::DocumentState; 41 using content::DocumentState;
42 using content::NavigationState; 42 using content::NavigationState;
43 using extensions::APIPermission;
44 43
45 namespace { 44 namespace {
46 45
47 enum { 46 enum {
48 INSECURE_CONTENT_DISPLAY = 0, 47 INSECURE_CONTENT_DISPLAY = 0,
49 INSECURE_CONTENT_DISPLAY_HOST_GOOGLE, 48 INSECURE_CONTENT_DISPLAY_HOST_GOOGLE,
50 INSECURE_CONTENT_DISPLAY_HOST_WWW_GOOGLE, 49 INSECURE_CONTENT_DISPLAY_HOST_WWW_GOOGLE,
51 INSECURE_CONTENT_DISPLAY_HTML, 50 INSECURE_CONTENT_DISPLAY_HTML,
52 INSECURE_CONTENT_RUN, 51 INSECURE_CONTENT_RUN,
53 INSECURE_CONTENT_RUN_HOST_GOOGLE, 52 INSECURE_CONTENT_RUN_HOST_GOOGLE,
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 } 146 }
148 147
149 } // namespace 148 } // namespace
150 149
151 ContentSettingsObserver::ContentSettingsObserver( 150 ContentSettingsObserver::ContentSettingsObserver(
152 content::RenderFrame* render_frame, 151 content::RenderFrame* render_frame,
153 extensions::Dispatcher* extension_dispatcher) 152 extensions::Dispatcher* extension_dispatcher)
154 : content::RenderFrameObserver(render_frame), 153 : content::RenderFrameObserver(render_frame),
155 content::RenderFrameObserverTracker<ContentSettingsObserver>( 154 content::RenderFrameObserverTracker<ContentSettingsObserver>(
156 render_frame), 155 render_frame),
156 #if defined(ENABLE_EXTENSIONS)
157 extension_dispatcher_(extension_dispatcher), 157 extension_dispatcher_(extension_dispatcher),
158 #endif
158 allow_displaying_insecure_content_(false), 159 allow_displaying_insecure_content_(false),
159 allow_running_insecure_content_(false), 160 allow_running_insecure_content_(false),
160 content_setting_rules_(NULL), 161 content_setting_rules_(NULL),
161 is_interstitial_page_(false), 162 is_interstitial_page_(false),
162 npapi_plugins_blocked_(false), 163 npapi_plugins_blocked_(false),
163 current_request_id_(0) { 164 current_request_id_(0) {
164 ClearBlockedContentSettings(); 165 ClearBlockedContentSettings();
165 render_frame->GetWebFrame()->setPermissionClient(this); 166 render_frame->GetWebFrame()->setPermissionClient(this);
166 167
167 if (render_frame->GetRenderView()->GetMainRenderFrame() != render_frame) { 168 if (render_frame->GetRenderView()->GetMainRenderFrame() != render_frame) {
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 bool allowed = false; 423 bool allowed = false;
423 #if defined(ENABLE_EXTENSIONS) 424 #if defined(ENABLE_EXTENSIONS)
424 WebFrame* frame = render_frame()->GetWebFrame(); 425 WebFrame* frame = render_frame()->GetWebFrame();
425 Send(new ChromeViewHostMsg_CanTriggerClipboardWrite( 426 Send(new ChromeViewHostMsg_CanTriggerClipboardWrite(
426 GURL(frame->document().securityOrigin().toString()), &allowed)); 427 GURL(frame->document().securityOrigin().toString()), &allowed));
427 #endif 428 #endif
428 return allowed; 429 return allowed;
429 } 430 }
430 431
431 bool ContentSettingsObserver::allowMutationEvents(bool default_value) { 432 bool ContentSettingsObserver::allowMutationEvents(bool default_value) {
433 #if defined(ENABLE_EXTENSIONS)
432 WebFrame* frame = render_frame()->GetWebFrame(); 434 WebFrame* frame = render_frame()->GetWebFrame();
433 WebSecurityOrigin origin = frame->document().securityOrigin(); 435 WebSecurityOrigin origin = frame->document().securityOrigin();
434 const extensions::Extension* extension = GetExtension(origin); 436 const extensions::Extension* extension = GetExtension(origin);
435 if (extension && extension->is_platform_app()) 437 if (extension && extension->is_platform_app())
436 return false; 438 return false;
439 #endif
437 return default_value; 440 return default_value;
438 } 441 }
439 442
440 bool ContentSettingsObserver::allowPushState() { 443 bool ContentSettingsObserver::allowPushState() {
444 #if defined(ENABLE_EXTENSIONS)
441 WebFrame* frame = render_frame()->GetWebFrame(); 445 WebFrame* frame = render_frame()->GetWebFrame();
Devlin 2014/08/12 15:34:59 This and the code in allowMutationEvents looks ver
Lei Zhang 2014/08/12 23:03:17 [fry_squint] These two functions look similar.[/fr
Devlin 2014/08/12 23:16:12 :D
442 WebSecurityOrigin origin = frame->document().securityOrigin(); 446 WebSecurityOrigin origin = frame->document().securityOrigin();
443 const extensions::Extension* extension = GetExtension(origin); 447 const extensions::Extension* extension = GetExtension(origin);
444 return !extension || !extension->is_platform_app(); 448 return !extension || !extension->is_platform_app();
449 #else
450 return true;
451 #endif
445 } 452 }
446 453
447 static void SendInsecureContentSignal(int signal) { 454 static void SendInsecureContentSignal(int signal) {
448 UMA_HISTOGRAM_ENUMERATION("SSL.InsecureContent", signal, 455 UMA_HISTOGRAM_ENUMERATION("SSL.InsecureContent", signal,
449 INSECURE_CONTENT_NUM_EVENTS); 456 INSECURE_CONTENT_NUM_EVENTS);
450 } 457 }
451 458
452 bool ContentSettingsObserver::allowDisplayingInsecureContent( 459 bool ContentSettingsObserver::allowDisplayingInsecureContent(
453 bool allowed_per_settings, 460 bool allowed_per_settings,
454 const blink::WebSecurityOrigin& origin, 461 const blink::WebSecurityOrigin& origin,
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 callbacks.doDeny(); 635 callbacks.doDeny();
629 } 636 }
630 637
631 void ContentSettingsObserver::ClearBlockedContentSettings() { 638 void ContentSettingsObserver::ClearBlockedContentSettings() {
632 for (size_t i = 0; i < arraysize(content_blocked_); ++i) 639 for (size_t i = 0; i < arraysize(content_blocked_); ++i)
633 content_blocked_[i] = false; 640 content_blocked_[i] = false;
634 cached_storage_permissions_.clear(); 641 cached_storage_permissions_.clear();
635 cached_script_permissions_.clear(); 642 cached_script_permissions_.clear();
636 } 643 }
637 644
645 #if defined(ENABLE_EXTENSIONS)
638 const extensions::Extension* ContentSettingsObserver::GetExtension( 646 const extensions::Extension* ContentSettingsObserver::GetExtension(
639 const WebSecurityOrigin& origin) const { 647 const WebSecurityOrigin& origin) const {
640 if (!EqualsASCII(origin.protocol(), extensions::kExtensionScheme)) 648 if (!EqualsASCII(origin.protocol(), extensions::kExtensionScheme))
641 return NULL; 649 return NULL;
642 650
643 const std::string extension_id = origin.host().utf8().data(); 651 const std::string extension_id = origin.host().utf8().data();
644 if (!extension_dispatcher_->IsExtensionActive(extension_id)) 652 if (!extension_dispatcher_->IsExtensionActive(extension_id))
645 return NULL; 653 return NULL;
646 654
647 return extension_dispatcher_->extensions()->GetByID(extension_id); 655 return extension_dispatcher_->extensions()->GetByID(extension_id);
648 } 656 }
657 #endif
649 658
650 bool ContentSettingsObserver::IsWhitelistedForContentSettings( 659 bool ContentSettingsObserver::IsWhitelistedForContentSettings(
651 content::RenderFrame* frame) { 660 content::RenderFrame* frame) {
652 // Whitelist Instant processes. 661 // Whitelist Instant processes.
653 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kInstantProcess)) 662 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kInstantProcess))
654 return true; 663 return true;
655 664
656 // Whitelist ftp directory listings, as they require JavaScript to function 665 // Whitelist ftp directory listings, as they require JavaScript to function
657 // properly. 666 // properly.
658 if (frame->IsFTPDirectoryListing()) 667 if (frame->IsFTPDirectoryListing())
(...skipping 12 matching lines...) Expand all
671 680
672 if (origin.isUnique()) 681 if (origin.isUnique())
673 return false; // Uninitialized document? 682 return false; // Uninitialized document?
674 683
675 if (EqualsASCII(origin.protocol(), content::kChromeUIScheme)) 684 if (EqualsASCII(origin.protocol(), content::kChromeUIScheme))
676 return true; // Browser UI elements should still work. 685 return true; // Browser UI elements should still work.
677 686
678 if (EqualsASCII(origin.protocol(), content::kChromeDevToolsScheme)) 687 if (EqualsASCII(origin.protocol(), content::kChromeDevToolsScheme))
679 return true; // DevTools UI elements should still work. 688 return true; // DevTools UI elements should still work.
680 689
690 #if defined(ENABLE_EXTENSIONS)
681 if (EqualsASCII(origin.protocol(), extensions::kExtensionScheme)) 691 if (EqualsASCII(origin.protocol(), extensions::kExtensionScheme))
682 return true; 692 return true;
693 #endif
683 694
684 // TODO(creis, fsamuel): Remove this once the concept of swapped out 695 // TODO(creis, fsamuel): Remove this once the concept of swapped out
685 // RenderFrames goes away. 696 // RenderFrames goes away.
686 if (document_url == GURL(content::kSwappedOutURL)) 697 if (document_url == GURL(content::kSwappedOutURL))
687 return true; 698 return true;
688 699
689 // If the scheme is file:, an empty file name indicates a directory listing, 700 // If the scheme is file:, an empty file name indicates a directory listing,
690 // which requires JavaScript to function properly. 701 // which requires JavaScript to function properly.
691 if (EqualsASCII(origin.protocol(), url::kFileScheme)) { 702 if (EqualsASCII(origin.protocol(), url::kFileScheme)) {
692 return document_url.SchemeIs(url::kFileScheme) && 703 return document_url.SchemeIs(url::kFileScheme) &&
693 document_url.ExtractFileName().empty(); 704 document_url.ExtractFileName().empty();
694 } 705 }
695 706
696 return false; 707 return false;
697 } 708 }
OLDNEW
« no previous file with comments | « chrome/renderer/content_settings_observer.h ('k') | chrome/renderer/content_settings_observer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698