Home | History | Annotate | Download | only in common
      1 // Copyright (c) 2012 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 CONTENT_PUBLIC_COMMON_CONTENT_CLIENT_H_
      6 #define CONTENT_PUBLIC_COMMON_CONTENT_CLIENT_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/strings/string16.h"
     13 #include "base/strings/string_piece.h"
     14 #include "build/build_config.h"
     15 #include "content/common/content_export.h"
     16 #include "ui/base/layout.h"
     17 
     18 class CommandLine;
     19 class GURL;
     20 
     21 namespace base {
     22 class RefCountedStaticMemory;
     23 }
     24 
     25 namespace IPC {
     26 class Message;
     27 }
     28 
     29 namespace gfx {
     30 class Image;
     31 }
     32 
     33 namespace gpu {
     34 struct GPUInfo;
     35 }
     36 
     37 namespace sandbox {
     38 class TargetPolicy;
     39 }
     40 
     41 namespace content {
     42 
     43 class ContentBrowserClient;
     44 class ContentClient;
     45 class ContentPluginClient;
     46 class ContentRendererClient;
     47 class ContentUtilityClient;
     48 struct PepperPluginInfo;
     49 
     50 // Setter and getter for the client.  The client should be set early, before any
     51 // content code is called.
     52 CONTENT_EXPORT void SetContentClient(ContentClient* client);
     53 
     54 #if defined(CONTENT_IMPLEMENTATION)
     55 // Content's embedder API should only be used by content.
     56 ContentClient* GetContentClient();
     57 #endif
     58 
     59 // Used for tests to override the relevant embedder interfaces. Each method
     60 // returns the old value.
     61 CONTENT_EXPORT ContentBrowserClient* SetBrowserClientForTesting(
     62     ContentBrowserClient* b);
     63 CONTENT_EXPORT ContentRendererClient* SetRendererClientForTesting(
     64     ContentRendererClient* r);
     65 CONTENT_EXPORT ContentUtilityClient* SetUtilityClientForTesting(
     66     ContentUtilityClient* u);
     67 
     68 // Returns the user agent string being used by the browser. SetContentClient()
     69 // must be called prior to calling this, and this routine must be used
     70 // instead of webkit_glue::GetUserAgent() in order to ensure that we use
     71 // the same user agent string everywhere.
     72 // TODO(dpranke): This is caused by webkit_glue being a library that can
     73 // get linked into multiple linkable objects, causing us to have multiple
     74 // static values of the user agent. This will be fixed when we clean up
     75 // webkit_glue.
     76 CONTENT_EXPORT const std::string& GetUserAgent(const GURL& url);
     77 
     78 // Interface that the embedder implements.
     79 class CONTENT_EXPORT ContentClient {
     80  public:
     81   ContentClient();
     82   virtual ~ContentClient();
     83 
     84   ContentBrowserClient* browser() { return browser_; }
     85   ContentPluginClient* plugin() { return plugin_; }
     86   ContentRendererClient* renderer() { return renderer_; }
     87   ContentUtilityClient* utility() { return utility_; }
     88 
     89   // Sets the currently active URL.  Use GURL() to clear the URL.
     90   virtual void SetActiveURL(const GURL& url) {}
     91 
     92   // Sets the data on the current gpu.
     93   virtual void SetGpuInfo(const gpu::GPUInfo& gpu_info) {}
     94 
     95   // Gives the embedder a chance to register its own pepper plugins.
     96   virtual void AddPepperPlugins(
     97       std::vector<content::PepperPluginInfo>* plugins) {}
     98 
     99   // Gives the embedder a chance to register its own standard and saveable
    100   // url schemes early on in the startup sequence.
    101   virtual void AddAdditionalSchemes(
    102       std::vector<std::string>* standard_schemes,
    103       std::vector<std::string>* savable_schemes) {}
    104 
    105   // Returns whether the given message should be sent in a swapped out renderer.
    106   virtual bool CanSendWhileSwappedOut(const IPC::Message* message);
    107 
    108   // Returns whether the given message should be processed in the browser on
    109   // behalf of a swapped out renderer.
    110   virtual bool CanHandleWhileSwappedOut(const IPC::Message& message);
    111 
    112   // Returns a string describing the embedder product name and version,
    113   // of the form "productname/version", with no other slashes.
    114   // Used as part of the user agent string.
    115   virtual std::string GetProduct() const;
    116 
    117   // Returns the user agent.
    118   virtual std::string GetUserAgent() const;
    119 
    120   // Returns a string resource given its id.
    121   virtual base::string16 GetLocalizedString(int message_id) const;
    122 
    123   // Return the contents of a resource in a StringPiece given the resource id.
    124   virtual base::StringPiece GetDataResource(
    125       int resource_id,
    126       ui::ScaleFactor scale_factor) const;
    127 
    128   // Returns the raw bytes of a scale independent data resource.
    129   virtual base::RefCountedStaticMemory* GetDataResourceBytes(
    130       int resource_id) const;
    131 
    132   // Returns a native image given its id.
    133   virtual gfx::Image& GetNativeImageNamed(int resource_id) const;
    134 
    135   // Called by content::GetProcessTypeNameInEnglish for process types that it
    136   // doesn't know about because they're from the embedder.
    137   virtual std::string GetProcessTypeNameInEnglish(int type);
    138 
    139 #if defined(OS_MACOSX) && !defined(OS_IOS)
    140   // Allows the embedder to define a new |sandbox_type| by mapping it to the
    141   // resource ID corresponding to the sandbox profile to use. The legal values
    142   // for |sandbox_type| are defined by the embedder and should start with
    143   // SandboxType::SANDBOX_TYPE_AFTER_LAST_TYPE. Returns false if no sandbox
    144   // profile for the given |sandbox_type| exists. Otherwise,
    145   // |sandbox_profile_resource_id| is set to the resource ID corresponding to
    146   // the sandbox profile to use and true is returned.
    147   virtual bool GetSandboxProfileForSandboxType(
    148       int sandbox_type,
    149       int* sandbox_profile_resource_id) const;
    150 
    151   // Gets the Carbon interposing path to give to DYLD. Returns an empty string
    152   // if the embedder doesn't bundle it.
    153   virtual std::string GetCarbonInterposePath() const;
    154 #endif
    155 
    156  private:
    157   friend class ContentClientInitializer;  // To set these pointers.
    158   friend class InternalTestInitializer;
    159 
    160   // The embedder API for participating in browser logic.
    161   ContentBrowserClient* browser_;
    162   // The embedder API for participating in plugin logic.
    163   ContentPluginClient* plugin_;
    164   // The embedder API for participating in renderer logic.
    165   ContentRendererClient* renderer_;
    166   // The embedder API for participating in utility logic.
    167   ContentUtilityClient* utility_;
    168 };
    169 
    170 }  // namespace content
    171 
    172 #endif  // CONTENT_PUBLIC_COMMON_CONTENT_CLIENT_H_
    173