15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_PUBLIC_COMMON_CONTENT_CLIENT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_COMMON_CONTENT_CLIENT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_piece.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/layout.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RefCountedStaticMemory; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Message; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Image; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace gpu { 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)struct GPUInfo; 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace sandbox { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TargetPolicy; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentBrowserClient; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentClient; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentPluginClient; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentRendererClient; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentUtilityClient; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PepperPluginInfo; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Setter and getter for the client. The client should be set early, before any 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// content code is called. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CONTENT_EXPORT void SetContentClient(ContentClient* client); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(CONTENT_IMPLEMENTATION) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Content's embedder API should only be used by content. 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ContentClient* GetContentClient(); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Used for tests to override the relevant embedder interfaces. Each method 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// returns the old value. 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)CONTENT_EXPORT ContentBrowserClient* SetBrowserClientForTesting( 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ContentBrowserClient* b); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)CONTENT_EXPORT ContentRendererClient* SetRendererClientForTesting( 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ContentRendererClient* r); 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochCONTENT_EXPORT ContentUtilityClient* SetUtilityClientForTesting( 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ContentUtilityClient* u); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Interface that the embedder implements. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT ContentClient { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentClient(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentClient(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentBrowserClient* browser() { return browser_; } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentPluginClient* plugin() { return plugin_; } 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentRendererClient* renderer() { return renderer_; } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentUtilityClient* utility() { return utility_; } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the currently active URL. Use GURL() to clear the URL. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetActiveURL(const GURL& url) {} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the data on the current gpu. 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void SetGpuInfo(const gpu::GPUInfo& gpu_info) {} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gives the embedder a chance to register its own pepper plugins. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddPepperPlugins( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<content::PepperPluginInfo>* plugins) {} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gives the embedder a chance to register its own standard and saveable 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // url schemes early on in the startup sequence. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddAdditionalSchemes( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string>* standard_schemes, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string>* savable_schemes) {} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns whether the given message should be sent in a swapped out renderer. 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool CanSendWhileSwappedOut(const IPC::Message* message); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Returns a string describing the embedder product name and version, 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // of the form "productname/version", with no other slashes. 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Used as part of the user agent string. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetProduct() const; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the user agent. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetUserAgent() const; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a string resource given its id. 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual base::string16 GetLocalizedString(int message_id) const; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the contents of a resource in a StringPiece given the resource id. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual base::StringPiece GetDataResource( 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_id, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ScaleFactor scale_factor) const; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the raw bytes of a scale independent data resource. 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::RefCountedStaticMemory* GetDataResourceBytes( 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int resource_id) const; 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a native image given its id. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Image& GetNativeImageNamed(int resource_id) const; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called by content::GetProcessTypeNameInEnglish for process types that it 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // doesn't know about because they're from the embedder. 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual std::string GetProcessTypeNameInEnglish(int type); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) && !defined(OS_IOS) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allows the embedder to define a new |sandbox_type| by mapping it to the 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // resource ID corresponding to the sandbox profile to use. The legal values 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for |sandbox_type| are defined by the embedder and should start with 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SandboxType::SANDBOX_TYPE_AFTER_LAST_TYPE. Returns false if no sandbox 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile for the given |sandbox_type| exists. Otherwise, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |sandbox_profile_resource_id| is set to the resource ID corresponding to 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the sandbox profile to use and true is returned. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetSandboxProfileForSandboxType( 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sandbox_type, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* sandbox_profile_resource_id) const; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class ContentClientInitializer; // To set these pointers. 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) friend class InternalTestInitializer; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The embedder API for participating in browser logic. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentBrowserClient* browser_; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The embedder API for participating in plugin logic. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentPluginClient* plugin_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The embedder API for participating in renderer logic. 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentRendererClient* renderer_; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The embedder API for participating in utility logic. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentUtilityClient* utility_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_PUBLIC_COMMON_CONTENT_CLIENT_H_ 154