From d16d5b290af35b845fdb78263f315658446b93e9 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 11 Mar 2015 14:38:29 -0700 Subject: [PATCH] Remove the "X-Frame-Options" from response headers for devtools --- atom.gyp | 2 ++ atom/browser/atom_browser_client.cc | 8 +++++ atom/browser/atom_browser_client.h | 5 +++ .../atom_resource_dispatcher_host_delegate.cc | 33 +++++++++++++++++++ .../atom_resource_dispatcher_host_delegate.h | 30 +++++++++++++++++ 5 files changed, 78 insertions(+) create mode 100644 atom/browser/atom_resource_dispatcher_host_delegate.cc create mode 100644 atom/browser/atom_resource_dispatcher_host_delegate.h diff --git a/atom.gyp b/atom.gyp index cd45b62a8b9f..6ac1aa94b2f1 100644 --- a/atom.gyp +++ b/atom.gyp @@ -114,6 +114,8 @@ 'atom/browser/atom_browser_main_parts_mac.mm', 'atom/browser/atom_javascript_dialog_manager.cc', 'atom/browser/atom_javascript_dialog_manager.h', + 'atom/browser/atom_resource_dispatcher_host_delegate.cc', + 'atom/browser/atom_resource_dispatcher_host_delegate.h', 'atom/browser/atom_speech_recognition_manager_delegate.cc', 'atom/browser/atom_speech_recognition_manager_delegate.h', 'atom/browser/browser.cc', diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index a4ca59c63b81..ef76693b2c27 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -7,6 +7,7 @@ #include "atom/browser/atom_access_token_store.h" #include "atom/browser/atom_browser_context.h" #include "atom/browser/atom_browser_main_parts.h" +#include "atom/browser/atom_resource_dispatcher_host_delegate.h" #include "atom/browser/atom_speech_recognition_manager_delegate.h" #include "atom/browser/native_window.h" #include "atom/browser/web_view_manager.h" @@ -18,6 +19,7 @@ #include "chrome/browser/speech/tts_message_filter.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" +#include "content/public/browser/resource_dispatcher_host.h" #include "content/public/browser/site_instance.h" #include "content/public/browser/web_contents.h" #include "content/public/common/web_preferences.h" @@ -69,6 +71,12 @@ content::AccessTokenStore* AtomBrowserClient::CreateAccessTokenStore() { return new AtomAccessTokenStore; } +void AtomBrowserClient::ResourceDispatcherHostCreated() { + resource_dispatcher_delegate_.reset(new AtomResourceDispatcherHostDelegate); + content::ResourceDispatcherHost::Get()->SetDelegate( + resource_dispatcher_delegate_.get()); +} + void AtomBrowserClient::OverrideWebkitPrefs( content::RenderViewHost* render_view_host, const GURL& url, diff --git a/atom/browser/atom_browser_client.h b/atom/browser/atom_browser_client.h index 72461f1e72f4..f35dddac1238 100644 --- a/atom/browser/atom_browser_client.h +++ b/atom/browser/atom_browser_client.h @@ -11,6 +11,8 @@ namespace atom { +class AtomResourceDispatcherHostDelegate; + class AtomBrowserClient : public brightray::BrowserClient { public: AtomBrowserClient(); @@ -22,6 +24,7 @@ class AtomBrowserClient : public brightray::BrowserClient { content::SpeechRecognitionManagerDelegate* CreateSpeechRecognitionManagerDelegate() override; content::AccessTokenStore* CreateAccessTokenStore() override; + void ResourceDispatcherHostCreated() override; void OverrideWebkitPrefs(content::RenderViewHost* render_view_host, const GURL& url, content::WebPreferences* prefs) override; @@ -37,6 +40,8 @@ class AtomBrowserClient : public brightray::BrowserClient { brightray::BrowserMainParts* OverrideCreateBrowserMainParts( const content::MainFunctionParams&) override; + scoped_ptr resource_dispatcher_delegate_; + // The render process which would be swapped out soon. content::RenderProcessHost* dying_render_process_; diff --git a/atom/browser/atom_resource_dispatcher_host_delegate.cc b/atom/browser/atom_resource_dispatcher_host_delegate.cc new file mode 100644 index 000000000000..95335abcc576 --- /dev/null +++ b/atom/browser/atom_resource_dispatcher_host_delegate.cc @@ -0,0 +1,33 @@ +// Copyright (c) 2014 GitHub, Inc. All rights reserved. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/browser/atom_resource_dispatcher_host_delegate.h" + +#include + +#include "base/logging.h" +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/resource_request_info.h" +#include "net/http/http_response_headers.h" +#include "net/url_request/url_request.h" + +namespace atom { + +AtomResourceDispatcherHostDelegate::AtomResourceDispatcherHostDelegate() { +} + +void AtomResourceDispatcherHostDelegate::OnResponseStarted( + net::URLRequest* request, + content::ResourceContext* resource_context, + content::ResourceResponse* response, + IPC::Sender* sender) { + // Remove the "X-Frame-Options" from response headers for devtools. + if (request->url().SchemeIs("chrome-devtools")) { + net::HttpResponseHeaders* response_headers = request->response_headers(); + if (response_headers && response_headers->HasHeader("x-frame-options")) + response_headers->RemoveHeader("x-frame-options"); + } +} + +} // namespace atom diff --git a/atom/browser/atom_resource_dispatcher_host_delegate.h b/atom/browser/atom_resource_dispatcher_host_delegate.h new file mode 100644 index 000000000000..12032444bce1 --- /dev/null +++ b/atom/browser/atom_resource_dispatcher_host_delegate.h @@ -0,0 +1,30 @@ +// Copyright (c) 2014 GitHub, Inc. All rights reserved. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef ATOM_BROWSER_ATOM_RESOURCE_DISPATCHER_HOST_DELEGATE_H_ +#define ATOM_BROWSER_ATOM_RESOURCE_DISPATCHER_HOST_DELEGATE_H_ + +#include "base/compiler_specific.h" +#include "content/public/browser/resource_dispatcher_host_delegate.h" + +namespace atom { + +class AtomResourceDispatcherHostDelegate + : public content::ResourceDispatcherHostDelegate { + public: + AtomResourceDispatcherHostDelegate(); + + // content::ResourceDispatcherHostDelegate: + void OnResponseStarted(net::URLRequest* request, + content::ResourceContext* resource_context, + content::ResourceResponse* response, + IPC::Sender* sender) override; + + private: + DISALLOW_COPY_AND_ASSIGN(AtomResourceDispatcherHostDelegate); +}; + +} // namespace atom + +#endif // ATOM_BROWSER_ATOM_RESOURCE_DISPATCHER_HOST_DELEGATE_H_