web_ui_data_source.h revision 7d4cd473f85ac64c3747c96c277f9e506a0d2246
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CONTENT_PUBLIC_BROWSER_WEB_UI_DATA_SOURCE_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CONTENT_PUBLIC_BROWSER_WEB_UI_DATA_SOURCE_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/content_export.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DictionaryValue; 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RefCountedMemory; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserContext; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A data source that can help with implementing the common operations needed by 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// WebUI pages. 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebUIDataSource { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~WebUIDataSource() {} 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_EXPORT static WebUIDataSource* Create(const std::string& source_name); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a WebUI data source to |browser_context|. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_EXPORT static void Add(BrowserContext* browser_context, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebUIDataSource* source); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a string keyed to its name to our dictionary. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddString(const std::string& name, const string16& value) = 0; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a string keyed to its name to our dictionary. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddString(const std::string& name, const std::string& value) = 0; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a localized string with resource |ids| keyed to its name to our 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // dictionary. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddLocalizedString(const std::string& name, int ids) = 0; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add strings from |localized_strings| to our dictionary. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddLocalizedStrings( 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue& localized_strings) = 0; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a boolean keyed to its name to our dictionary. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddBoolean(const std::string& name, bool value) = 0; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the path which will return the JSON strings. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetJsonPath(const std::string& path) = 0; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the data source to use a slightly different format for json data. Some 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // day this should become the default. 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUseJsonJSFormatV2() = 0; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a mapping between a path name and a resource to return. 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddResourcePath(const std::string &path, int resource_id) = 0; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the resource to returned when no other paths match. 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetDefaultResource(int resource_id) = 0; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used as a parameter to GotDataCallback. The caller has to run this callback 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // with the result for the path that they filtered, passing ownership of the 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // memory. 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef base::Callback<void(base::RefCountedMemory*)> GotDataCallback; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used by SetRequestFilter. The string parameter is the path of the request. 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the callee doesn't want to handle the data, false is returned. Otherwise 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // true is returned and the GotDataCallback parameter is called either then or 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // asynchronously with the response. 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef base::Callback<bool(const std::string&, const GotDataCallback&)> 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HandleRequestCallback; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Allows a caller to add a filter for URL requests. 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetRequestFilter(const HandleRequestCallback& callback) = 0; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The following map to methods on URLDataSource. See the documentation there. 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NOTE: it's not acceptable to call DisableContentSecurityPolicy for new 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // pages, see URLDataSource::ShouldAddContentSecurityPolicy and talk to 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // tsepez. 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DisableContentSecurityPolicy() = 0; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OverrideContentSecurityPolicyObjectSrc( 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& data) = 0; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OverrideContentSecurityPolicyFrameSrc( 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& data) = 0; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DisableDenyXFrameOptions() = 0; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CONTENT_PUBLIC_BROWSER_WEB_UI_DATA_SOURCE_H_ 92