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) 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Adds the necessary resources for mojo bindings returning the 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // WebUIDataSource that handles the resources. Callers do not own the return 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // value. 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CONTENT_EXPORT static WebUIDataSource* AddMojoDataSource( 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserContext* browser_context); 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a WebUI data source to |browser_context|. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_EXPORT static void Add(BrowserContext* browser_context, 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebUIDataSource* source); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a string keyed to its name to our dictionary. 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void AddString(const std::string& name, 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& value) = 0; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a string keyed to its name to our dictionary. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddString(const std::string& name, const std::string& value) = 0; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a localized string with resource |ids| keyed to its name to our 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // dictionary. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddLocalizedString(const std::string& name, int ids) = 0; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add strings from |localized_strings| to our dictionary. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddLocalizedStrings( 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue& localized_strings) = 0; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a boolean keyed to its name to our dictionary. 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddBoolean(const std::string& name, bool value) = 0; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the path which will return the JSON strings. 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetJsonPath(const std::string& path) = 0; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the data source to use a slightly different format for json data. Some 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // day this should become the default. 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUseJsonJSFormatV2() = 0; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a mapping between a path name and a resource to return. 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void AddResourcePath(const std::string& path, int resource_id) = 0; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the resource to returned when no other paths match. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetDefaultResource(int resource_id) = 0; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used as a parameter to GotDataCallback. The caller has to run this callback 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // with the result for the path that they filtered, passing ownership of the 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // memory. 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef base::Callback<void(base::RefCountedMemory*)> GotDataCallback; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used by SetRequestFilter. The string parameter is the path of the request. 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the callee doesn't want to handle the data, false is returned. Otherwise 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // true is returned and the GotDataCallback parameter is called either then or 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // asynchronously with the response. 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef base::Callback<bool(const std::string&, const GotDataCallback&)> 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HandleRequestCallback; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Allows a caller to add a filter for URL requests. 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetRequestFilter(const HandleRequestCallback& callback) = 0; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The following map to methods on URLDataSource. See the documentation there. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NOTE: it's not acceptable to call DisableContentSecurityPolicy for new 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // pages, see URLDataSource::ShouldAddContentSecurityPolicy and talk to 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // tsepez. 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 89424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Currently only used by embedders for WebUIs with multiple instances. 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void DisableReplaceExistingSource() = 0; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DisableContentSecurityPolicy() = 0; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OverrideContentSecurityPolicyObjectSrc( 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& data) = 0; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OverrideContentSecurityPolicyFrameSrc( 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& data) = 0; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DisableDenyXFrameOptions() = 0; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CONTENT_PUBLIC_BROWSER_WEB_UI_DATA_SOURCE_H_ 102