Browse Source

renderer: add content settings class for managing storage

deepak1556 8 years ago
parent
commit
ed465208a2

+ 2 - 0
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?

+ 65 - 0
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

+ 37 - 0
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_

+ 2 - 0
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',