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)#include "content/public/common/content_client.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_piece.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h"
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/user_agent/user_agent.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static ContentClient* g_client;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class InternalTestInitializer {
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static ContentBrowserClient* SetBrowser(ContentBrowserClient* b) {
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ContentBrowserClient* rv = g_client->browser_;
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    g_client->browser_ = b;
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return rv;
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static ContentRendererClient* SetRenderer(ContentRendererClient* r) {
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ContentRendererClient* rv = g_client->renderer_;
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    g_client->renderer_ = r;
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return rv;
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  static ContentUtilityClient* SetUtility(ContentUtilityClient* u) {
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    ContentUtilityClient* rv = g_client->utility_;
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    g_client->utility_ = u;
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return rv;
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetContentClient(ContentClient* client) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  g_client = client;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the default user agent as provided by the client. We need to make
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // sure this is done before webkit_glue::GetUserAgent() is called (so that
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the UA doesn't change).
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (client) {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    webkit_glue::SetUserAgent(client->GetUserAgent(), false);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentClient* GetContentClient() {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return g_client;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ContentBrowserClient* SetBrowserClientForTesting(ContentBrowserClient* b) {
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return InternalTestInitializer::SetBrowser(b);
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ContentRendererClient* SetRendererClientForTesting(ContentRendererClient* r) {
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return InternalTestInitializer::SetRenderer(r);
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
607dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochContentUtilityClient* SetUtilityClientForTesting(ContentUtilityClient* u) {
617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return InternalTestInitializer::SetUtility(u);
627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const std::string& GetUserAgent(const GURL& url) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(g_client);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return webkit_glue::GetUserAgent(url);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentClient::ContentClient()
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : browser_(NULL), plugin_(NULL), renderer_(NULL), utility_(NULL) {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentClient::~ContentClient() {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ContentClient::CanSendWhileSwappedOut(const IPC::Message* message) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentClient::CanHandleWhileSwappedOut(const IPC::Message& message) {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ContentClient::GetProduct() const {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return std::string();
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ContentClient::GetUserAgent() const {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return std::string();
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 ContentClient::GetLocalizedString(int message_id) const {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return string16();
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::StringPiece ContentClient::GetDataResource(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int resource_id,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::ScaleFactor scale_factor) const {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return base::StringPiece();
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::RefCountedStaticMemory* ContentClient::GetDataResourceBytes(
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int resource_id) const {
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return NULL;
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Image& ContentClient::GetNativeImageNamed(int resource_id) const {
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CR_DEFINE_STATIC_LOCAL(gfx::Image, kEmptyImage, ());
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return kEmptyImage;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string ContentClient::GetProcessTypeNameInEnglish(int type) {
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NOTIMPLEMENTED();
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return std::string();
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) && !defined(OS_IOS)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentClient::GetSandboxProfileForSandboxType(
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int sandbox_type,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int* sandbox_profile_resource_id) const {
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ContentClient::GetCarbonInterposePath() const {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return std::string();
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
130