From ed465208a2f65c57bd15c21701f6ce7a0a7d831f Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Wed, 21 Sep 2016 21:47:30 +0530 Subject: [PATCH] renderer: add content settings class for managing storage --- atom/renderer/atom_renderer_client.cc | 2 + atom/renderer/content_settings_observer.cc | 65 ++++++++++++++++++++++ atom/renderer/content_settings_observer.h | 37 ++++++++++++ filenames.gypi | 2 + 4 files changed, 106 insertions(+) create mode 100644 atom/renderer/content_settings_observer.cc create mode 100644 atom/renderer/content_settings_observer.h diff --git a/atom/renderer/atom_renderer_client.cc b/atom/renderer/atom_renderer_client.cc index e7d7a6e36cab..c3ad11e1438e 100644 --- a/atom/renderer/atom_renderer_client.cc +++ b/atom/renderer/atom_renderer_client.cc @@ -15,6 +15,7 @@ #include "atom/common/node_bindings.h" #include "atom/common/options_switches.h" #include "atom/renderer/atom_render_view_observer.h" +#include "atom/renderer/content_settings_observer.h" #include "atom/renderer/guest_view_container.h" #include "atom/renderer/node_array_buffer_bridge.h" #include "atom/renderer/preferences_manager.h" @@ -176,6 +177,7 @@ void AtomRendererClient::RenderFrameCreated( content::RenderFrame* render_frame) { new PepperHelper(render_frame); new AtomRenderFrameObserver(render_frame, this); + new ContentSettingsObserver(render_frame); // Allow file scheme to handle service worker by default. // FIXME(zcbenz): Can this be moved elsewhere? diff --git a/atom/renderer/content_settings_observer.cc b/atom/renderer/content_settings_observer.cc new file mode 100644 index 000000000000..9f0f202b5c56 --- /dev/null +++ b/atom/renderer/content_settings_observer.cc @@ -0,0 +1,65 @@ +// Copyright (c) 2016 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/renderer/content_settings_observer.h" + +#include "content/public/renderer/render_frame.h" +#include "third_party/WebKit/public/platform/URLConversion.h" +#include "third_party/WebKit/public/platform/WebSecurityOrigin.h" +#include "third_party/WebKit/public/web/WebLocalFrame.h" + +namespace atom { + +ContentSettingsObserver::ContentSettingsObserver( + content::RenderFrame* render_frame) + : content::RenderFrameObserver(render_frame) { + render_frame->GetWebFrame()->setContentSettingsClient(this); +} + +ContentSettingsObserver::~ContentSettingsObserver() { +} + +bool ContentSettingsObserver::allowDatabase( + const blink::WebString& name, + const blink::WebString& display_name, + unsigned estimated_size) { + blink::WebFrame* frame = render_frame()->GetWebFrame(); + if (frame->getSecurityOrigin().isUnique() || + frame->top()->getSecurityOrigin().isUnique()) + return false; + auto origin = blink::WebStringToGURL(frame->getSecurityOrigin().toString()); + if (!origin.IsStandard()) + return false; + return true; +} + +bool ContentSettingsObserver::allowStorage(bool local) { + blink::WebFrame* frame = render_frame()->GetWebFrame(); + if (frame->getSecurityOrigin().isUnique() || + frame->top()->getSecurityOrigin().isUnique()) + return false; + auto origin = blink::WebStringToGURL(frame->getSecurityOrigin().toString()); + if (!origin.IsStandard()) + return false; + return true; +} + +bool ContentSettingsObserver::allowIndexedDB( + const blink::WebString& name, + const blink::WebSecurityOrigin& security_origin) { + blink::WebFrame* frame = render_frame()->GetWebFrame(); + if (frame->getSecurityOrigin().isUnique() || + frame->top()->getSecurityOrigin().isUnique()) + return false; + auto origin = blink::WebStringToGURL(frame->getSecurityOrigin().toString()); + if (!origin.IsStandard()) + return false; + return true; +} + +void ContentSettingsObserver::OnDestruct() { + delete this; +} + +} // namespace atom diff --git a/atom/renderer/content_settings_observer.h b/atom/renderer/content_settings_observer.h new file mode 100644 index 000000000000..66e679d6d06a --- /dev/null +++ b/atom/renderer/content_settings_observer.h @@ -0,0 +1,37 @@ +// Copyright (c) 2016 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef ATOM_RENDERER_CONTENT_SETTINGS_OBSERVER_H_ +#define ATOM_RENDERER_CONTENT_SETTINGS_OBSERVER_H_ + +#include "base/compiler_specific.h" +#include "content/public/renderer/render_frame_observer.h" +#include "third_party/WebKit/public/web/WebContentSettingsClient.h" + +namespace atom { + +class ContentSettingsObserver : public content::RenderFrameObserver, + public blink::WebContentSettingsClient { + public: + explicit ContentSettingsObserver(content::RenderFrame* render_frame); + ~ContentSettingsObserver() override; + + // blink::WebContentSettingsClient implementation. + bool allowDatabase(const blink::WebString& name, + const blink::WebString& display_name, + unsigned estimated_size) override; + bool allowStorage(bool local) override; + bool allowIndexedDB(const blink::WebString& name, + const blink::WebSecurityOrigin& security_origin) override; + + private: + // content::RenderFrameObserver implementation. + void OnDestruct() override; + + DISALLOW_COPY_AND_ASSIGN(ContentSettingsObserver); +}; + +} // namespace atom + +#endif // ATOM_RENDERER_CONTENT_SETTINGS_OBSERVER_H_ diff --git a/filenames.gypi b/filenames.gypi index 88a8dc0510e1..f8d80c0fda4e 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -433,6 +433,8 @@ 'atom/renderer/atom_render_view_observer.h', 'atom/renderer/atom_renderer_client.cc', 'atom/renderer/atom_renderer_client.h', + 'atom/renderer/content_settings_observer.cc', + 'atom/renderer/content_settings_observer.h', 'atom/renderer/guest_view_container.cc', 'atom/renderer/guest_view_container.h', 'atom/renderer/node_array_buffer_bridge.cc',