1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_SEARCH_IFRAME_SOURCE_H_ 6#define CHROME_BROWSER_SEARCH_IFRAME_SOURCE_H_ 7 8#include "base/basictypes.h" 9#include "base/compiler_specific.h" 10#include "content/public/browser/url_data_source.h" 11 12// Base class for URL data sources for chrome-search:// iframed content. 13class IframeSource : public content::URLDataSource { 14 public: 15 IframeSource(); 16 virtual ~IframeSource(); 17 18 protected: 19 // Overridden from content::URLDataSource: 20 virtual std::string GetMimeType( 21 const std::string& path_and_query) const OVERRIDE; 22 virtual bool ShouldDenyXFrameOptions() const OVERRIDE; 23 virtual bool ShouldServiceRequest( 24 const net::URLRequest* request) const OVERRIDE; 25 26 // Returns whether this source should serve data for a particular path. 27 virtual bool ServesPath(const std::string& path) const = 0; 28 29 // Sends unmodified resource bytes. 30 void SendResource( 31 int resource_id, 32 const content::URLDataSource::GotDataCallback& callback); 33 34 // Sends Javascript with an expected postMessage origin interpolated. 35 void SendJSWithOrigin( 36 int resource_id, 37 int render_process_id, 38 int render_frame_id, 39 const content::URLDataSource::GotDataCallback& callback); 40 41 // This is exposed for testing and should not be overridden. 42 // Sets |origin| to the URL of the render frame identified by |process_id| and 43 // |render_frame_id|. Returns true if successful and false if not, for example 44 // if the render frame does not exist. 45 virtual bool GetOrigin( 46 int process_id, 47 int render_frame_id, 48 std::string* origin) const; 49 50 DISALLOW_COPY_AND_ASSIGN(IframeSource); 51}; 52 53#endif // CHROME_BROWSER_SEARCH_IFRAME_SOURCE_H_ 54