summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/child_process_launcher.h1
-rw-r--r--chrome/browser/gpu_blacklist.h219
-rw-r--r--chrome/browser/gpu_process_host.h46
-rw-r--r--chrome/browser/gpu_process_host_ui_shim.cc3
-rw-r--r--chrome/browser/host_zoom_map.h119
-rw-r--r--chrome/browser/mime_registry_message_filter.h24
-rw-r--r--chrome/browser/modal_html_dialog_delegate.h60
-rw-r--r--chrome/browser/plugin_process_host.h169
-rw-r--r--chrome/browser/plugin_service.h225
-rw-r--r--chrome/browser/ppapi_plugin_process_host.h69
-rw-r--r--chrome/browser/zygote_host_linux.h90
-rw-r--r--chrome/chrome_browser.gypi27
-rw-r--r--chrome/chrome_tests.gypi8
-rw-r--r--content/DEPS1
-rw-r--r--content/browser/gpu.sb (renamed from chrome/browser/gpu.sb)0
-rw-r--r--content/browser/gpu_blacklist.cc (renamed from chrome/browser/gpu_blacklist.cc)2
-rw-r--r--content/browser/gpu_blacklist.h227
-rw-r--r--content/browser/gpu_blacklist_unittest.cc (renamed from chrome/browser/gpu_blacklist_unittest.cc)2
-rw-r--r--content/browser/gpu_process_host.cc (renamed from chrome/browser/gpu_process_host.cc)8
-rw-r--r--content/browser/gpu_process_host.h54
-rw-r--r--content/browser/host_zoom_map.cc (renamed from chrome/browser/host_zoom_map.cc)6
-rw-r--r--content/browser/host_zoom_map.h127
-rw-r--r--content/browser/host_zoom_map_unittest.cc (renamed from chrome/browser/host_zoom_map_unittest.cc)0
-rw-r--r--content/browser/mime_registry_message_filter.cc (renamed from chrome/browser/mime_registry_message_filter.cc)2
-rw-r--r--content/browser/mime_registry_message_filter.h31
-rw-r--r--content/browser/modal_html_dialog_delegate.cc (renamed from chrome/browser/modal_html_dialog_delegate.cc)6
-rw-r--r--content/browser/modal_html_dialog_delegate.h68
-rw-r--r--content/browser/plugin_process_host.cc (renamed from chrome/browser/plugin_process_host.cc)10
-rw-r--r--content/browser/plugin_process_host.h177
-rw-r--r--content/browser/plugin_process_host_mac.cc (renamed from chrome/browser/plugin_process_host_mac.cc)4
-rw-r--r--content/browser/plugin_service.cc (renamed from chrome/browser/plugin_service.cc)8
-rw-r--r--content/browser/plugin_service.h232
-rw-r--r--content/browser/plugin_service_browsertest.cc (renamed from chrome/browser/plugin_service_browsertest.cc)4
-rw-r--r--content/browser/plugin_service_unittest.cc (renamed from chrome/browser/plugin_service_unittest.cc)4
-rw-r--r--content/browser/ppapi_plugin_process_host.cc (renamed from chrome/browser/ppapi_plugin_process_host.cc)6
-rw-r--r--content/browser/ppapi_plugin_process_host.h78
-rw-r--r--content/browser/worker.sb (renamed from chrome/browser/worker.sb)0
-rw-r--r--content/browser/zygote_host_linux.cc (renamed from chrome/browser/zygote_host_linux.cc)4
-rw-r--r--content/browser/zygote_host_linux.h98
-rw-r--r--content/browser/zygote_main_linux.cc (renamed from chrome/browser/zygote_main_linux.cc)3
-rw-r--r--content/content_browser.gypi28
41 files changed, 1181 insertions, 1069 deletions
diff --git a/chrome/browser/child_process_launcher.h b/chrome/browser/child_process_launcher.h
index f05d3b0..185595f 100644
--- a/chrome/browser/child_process_launcher.h
+++ b/chrome/browser/child_process_launcher.h
@@ -9,5 +9,4 @@
// TODO(jam): remove this file when all files have been converted.
#include "content/browser/child_process_launcher.h"
-
#endif // CHROME_BROWSER_CHILD_PROCESS_LAUNCHER_H_
diff --git a/chrome/browser/gpu_blacklist.h b/chrome/browser/gpu_blacklist.h
index 4fdf13a..f2335d3 100644
--- a/chrome/browser/gpu_blacklist.h
+++ b/chrome/browser/gpu_blacklist.h
@@ -6,223 +6,8 @@
#define CHROME_BROWSER_GPU_BLACKLIST_H_
#pragma once
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/scoped_ptr.h"
-#include "chrome/common/gpu_feature_flags.h"
-
-class DictionaryValue;
-class GPUInfo;
-class Version;
-
-class GpuBlacklist {
- public:
- enum OsType {
- kOsLinux,
- kOsMacosx,
- kOsWin,
- kOsAny,
- kOsUnknown
- };
-
- GpuBlacklist();
- ~GpuBlacklist();
-
- // Loads blacklist information from a json file.
- // current_os_only==true indicates all blacklist entries that don't belong to
- // the current OS are discarded; current_os_only==false should only be used
- // for testing purpose.
- // If failed, the current GpuBlacklist is un-touched.
- bool LoadGpuBlacklist(const std::string& json_context,
- bool current_os_only);
-
- // Collects system information and combines them with gpu_info and blacklist
- // information to determine gpu feature flags.
- // If os is kOsAny, use the current OS; if os_version is null, use the
- // current OS version.
- GpuFeatureFlags DetermineGpuFeatureFlags(OsType os,
- Version* os_version,
- const GPUInfo& gpu_info);
-
- // Collects the entries that set the "feature" flag from the last
- // DetermineGpuFeatureFlags() call. This tells which entries are responsible
- // for raising a certain flag, i.e, for blacklisting a certain feature.
- // Examples of "feature":
- // kGpuFeatureAll - any of the supported features;
- // kGpuFeatureWebgl - a single feature;
- // kGpuFeatureWebgl | kGpuFeatureAcceleratedCompositing - two features.
- void GetGpuFeatureFlagEntries(GpuFeatureFlags::GpuFeatureType feature,
- std::vector<uint32>& entry_ids) const;
-
- // Return the largest entry id. This is used for histogramming.
- uint32 max_entry_id() const;
-
- // Collects the version of the current blacklist. Returns false and sets
- // major and minor to 0 on failure.
- bool GetVersion(uint16* major, uint16* monir) const;
-
- private:
- class VersionInfo {
- public:
- VersionInfo(const std::string& version_op,
- const std::string& version_string,
- const std::string& version_string2);
- ~VersionInfo();
-
- // Determines if a given version is included in the VersionInfo range.
- bool Contains(const Version& version) const;
-
- // Determines if the VersionInfo contains valid information.
- bool IsValid() const;
-
- private:
- enum Op {
- kBetween, // <= * <=
- kEQ, // =
- kLT, // <
- kLE, // <=
- kGT, // >
- kGE, // >=
- kAny,
- kUnknown // Indicates VersionInfo data is invalid.
- };
-
- // Maps string to Op; returns kUnknown if it's not a valid Op.
- static Op StringToOp(const std::string& version_op);
-
- Op op_;
- scoped_ptr<Version> version_;
- scoped_ptr<Version> version2_;
- };
-
- class OsInfo {
- public:
- OsInfo(const std::string& os,
- const std::string& version_op,
- const std::string& version_string,
- const std::string& version_string2);
- ~OsInfo();
-
- // Determines if a given os/version is included in the OsInfo set.
- bool Contains(OsType type, const Version& version) const;
-
- // Determines if the VersionInfo contains valid information.
- bool IsValid() const;
-
- OsType type() const;
-
- // Maps string to OsType; returns kOsUnknown if it's not a valid os.
- static OsType StringToOsType(const std::string& os);
-
- private:
- OsType type_;
- scoped_ptr<VersionInfo> version_info_;
- };
-
- class StringInfo {
- public:
- StringInfo(const std::string& string_op, const std::string& string_value);
-
- // Determines if a given string is included in the StringInfo.
- bool Contains(const std::string& value) const;
-
- // Determines if the StringInfo contains valid information.
- bool IsValid() const;
-
- private:
- enum Op {
- kContains,
- kBeginWith,
- kEndWith,
- kEQ, // =
- kUnknown // Indicates StringInfo data is invalid.
- };
-
- // Maps string to Op; returns kUnknown if it's not a valid Op.
- static Op StringToOp(const std::string& string_op);
-
- Op op_;
- std::string value_;
- };
-
- class GpuBlacklistEntry {
- public:
- // Constructs GpuBlacklistEntry from DictionaryValue loaded from json.
- static GpuBlacklistEntry* GetGpuBlacklistEntryFromValue(
- DictionaryValue* value);
-
- // Determines if a given os/gc/driver is included in the Entry set.
- bool Contains(OsType os_type,
- const Version& os_version,
- const GPUInfo& gpu_info) const;
-
- // Returns the OsType.
- OsType GetOsType() const;
-
- // Returns the entry's unique id. 0 is reserved.
- uint32 id() const;
-
- // Returns the GpuFeatureFlags.
- GpuFeatureFlags GetGpuFeatureFlags() const;
-
- ~GpuBlacklistEntry();
-
- private:
- GpuBlacklistEntry();
-
- bool SetId(const std::string& id_string);
-
- bool SetOsInfo(const std::string& os,
- const std::string& version_op,
- const std::string& version_string,
- const std::string& version_string2);
-
- bool SetVendorId(const std::string& vendor_id_string);
-
- bool SetDeviceId(const std::string& device_id_string);
-
- bool SetDriverVendorInfo(const std::string& vendor_op,
- const std::string& vendor_value);
-
- bool SetDriverVersionInfo(const std::string& version_op,
- const std::string& version_string,
- const std::string& version_string2);
-
- bool SetGLRendererInfo(const std::string& renderer_op,
- const std::string& renderer_value);
-
- bool SetBlacklistedFeatures(
- const std::vector<std::string>& blacklisted_features);
-
- uint32 id_;
- scoped_ptr<OsInfo> os_info_;
- uint32 vendor_id_;
- uint32 device_id_;
- scoped_ptr<StringInfo> driver_vendor_info_;
- scoped_ptr<VersionInfo> driver_version_info_;
- scoped_ptr<StringInfo> gl_renderer_info_;
- scoped_ptr<GpuFeatureFlags> feature_flags_;
- };
-
- // Gets the current OS type.
- static OsType GetOsType();
-
- void Clear();
-
- scoped_ptr<Version> version_;
- std::vector<GpuBlacklistEntry*> blacklist_;
-
- // This records all the blacklist entries that are appliable to the current
- // user machine. It is updated everytime DetermineGpuFeatureFlags() is
- // called and is used later by GetGpuFeatureFlagEntries().
- std::vector<GpuBlacklistEntry*> active_entries_;
-
- uint32 max_entry_id_;
-
- DISALLOW_COPY_AND_ASSIGN(GpuBlacklist);
-};
+// TODO(jam): remove this file when all files have been converted.
+#include "content/browser/gpu_blacklist.h"
#endif // CHROME_BROWSER_GPU_BLACKLIST_H_
diff --git a/chrome/browser/gpu_process_host.h b/chrome/browser/gpu_process_host.h
index 851616a..348a6d4 100644
--- a/chrome/browser/gpu_process_host.h
+++ b/chrome/browser/gpu_process_host.h
@@ -6,49 +6,7 @@
#define CHROME_BROWSER_GPU_PROCESS_HOST_H_
#pragma once
-#include "base/threading/non_thread_safe.h"
-#include "chrome/browser/browser_child_process_host.h"
-
-namespace IPC {
-class Message;
-}
-
-class GpuProcessHost : public BrowserChildProcessHost,
- public base::NonThreadSafe {
- public:
-
- // Create a GpuProcessHost with the given ID. The object can be found using
- // FromID with the same id.
- static GpuProcessHost* Create(int host_id);
-
- // Get the GPU process host for the GPU process with the given ID. Returns
- // null if the process no longer exists.
- static GpuProcessHost* FromID(int host_id);
-
- virtual bool Send(IPC::Message* msg);
-
- // IPC::Channel::Listener implementation.
- virtual bool OnMessageReceived(const IPC::Message& message);
-
- private:
- explicit GpuProcessHost(int host_id);
- virtual ~GpuProcessHost();
- bool Init();
-
- // Post an IPC message to the UI shim's message handler on the UI thread.
- void RouteOnUIThread(const IPC::Message& message);
-
- virtual bool CanShutdown();
- virtual void OnChildDied();
- virtual void OnProcessCrashed(int exit_code);
-
- bool CanLaunchGpuProcess() const;
- bool LaunchGpuProcess();
-
- // The serial number of the GpuProcessHost / GpuProcessHostUIShim pair.
- int host_id_;
-
- DISALLOW_COPY_AND_ASSIGN(GpuProcessHost);
-};
+// TODO(jam): remove this file when all files have been converted.
+#include "content/browser/gpu_process_host.h"
#endif // CHROME_BROWSER_GPU_PROCESS_HOST_H_
diff --git a/chrome/browser/gpu_process_host_ui_shim.cc b/chrome/browser/gpu_process_host_ui_shim.cc
index 40b36bf..05a1a95 100644
--- a/chrome/browser/gpu_process_host_ui_shim.cc
+++ b/chrome/browser/gpu_process_host_ui_shim.cc
@@ -1,3 +1,6 @@
+// TODO(jam): move this file to src/content once we have an interface that the
+// embedder provides. We can then use it to get the resource and resize the
+// window.
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
diff --git a/chrome/browser/host_zoom_map.h b/chrome/browser/host_zoom_map.h
index 85e02ed..3ea83fb 100644
--- a/chrome/browser/host_zoom_map.h
+++ b/chrome/browser/host_zoom_map.h
@@ -2,126 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Maps hostnames to custom zoom levels. Written on the UI thread and read on
-// any thread. One instance per profile.
-
#ifndef CHROME_BROWSER_HOST_ZOOM_MAP_H_
#define CHROME_BROWSER_HOST_ZOOM_MAP_H_
#pragma once
-#include <map>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/ref_counted.h"
-#include "base/synchronization/lock.h"
-#include "chrome/browser/browser_thread.h"
-#include "chrome/browser/prefs/pref_change_registrar.h"
-#include "chrome/common/notification_observer.h"
-#include "chrome/common/notification_registrar.h"
-
-class GURL;
-class PrefService;
-class Profile;
-
-// HostZoomMap needs to be deleted on the UI thread because it listens
-// to notifications on there (and holds a NotificationRegistrar).
-class HostZoomMap :
- public NotificationObserver,
- public base::RefCountedThreadSafe<HostZoomMap,
- BrowserThread::DeleteOnUIThread> {
- public:
- explicit HostZoomMap(Profile* profile);
-
- static void RegisterUserPrefs(PrefService* prefs);
-
- // Returns the zoom level for a given url. The zoom level is determined by
- // the host portion of the URL, or (in the absence of a host) the complete
- // spec of the URL. In most cases, there is no custom zoom level, and this
- // returns the user's default zoom level. Otherwise, returns the saved zoom
- // level, which may be positive (to zoom in) or negative (to zoom out).
- //
- // This may be called on any thread.
- double GetZoomLevel(const GURL& url) const;
-
- // Sets the zoom level for a given url to |level|. If the level matches the
- // current default zoom level, the host is erased from the saved preferences;
- // otherwise the new value is written out.
- //
- // This should only be called on the UI thread.
- void SetZoomLevel(const GURL& url, double level);
-
- // Returns the temporary zoom level that's only valid for the lifetime of
- // the given tab (i.e. isn't saved and doesn't affect other tabs) if it
- // exists, the default zoom level otherwise.
- //
- // This may be called on any thread.
- double GetTemporaryZoomLevel(int render_process_id,
- int render_view_id) const;
-
- // Sets the temporary zoom level that's only valid for the lifetime of this
- // tab.
- //
- // This should only be called on the UI thread.
- void SetTemporaryZoomLevel(int render_process_id,
- int render_view_id,
- double level);
-
- // Resets all zoom levels.
- //
- // This should only be called on the UI thread.
- void ResetToDefaults();
-
- // NotificationObserver implementation.
- virtual void Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details);
-
- private:
- friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>;
- friend class DeleteTask<HostZoomMap>;
-
- typedef std::map<std::string, double> HostZoomLevels;
-
- ~HostZoomMap();
-
- // Reads the zoom levels from the preferences service.
- void Load();
-
- // Removes dependencies on the profile so we can live longer than
- // the profile without crashing.
- void Shutdown();
-
- // The profile we're associated with.
- Profile* profile_;
-
- // Copy of the pref data, so that we can read it on the IO thread.
- HostZoomLevels host_zoom_levels_;
- double default_zoom_level_;
-
- struct TemporaryZoomLevel {
- int render_process_id;
- int render_view_id;
- double zoom_level;
- };
-
- // Don't expect more than a couple of tabs that are using a temporary zoom
- // level, so vector is fine for now.
- std::vector<TemporaryZoomLevel> temporary_zoom_levels_;
-
- // Used around accesses to |host_zoom_levels_|, |default_zoom_level_| and
- // |temporary_zoom_levels_| to guarantee thread safety.
- mutable base::Lock lock_;
-
- // Whether we are currently updating preferences, this is used to ignore
- // notifications from the preference service that we triggered ourself.
- bool updating_preferences_;
-
- NotificationRegistrar registrar_;
- PrefChangeRegistrar pref_change_registrar_;
-
- DISALLOW_COPY_AND_ASSIGN(HostZoomMap);
-};
+// TODO(jam): remove this file when all files have been converted.
+#include "content/browser/host_zoom_map.h"
#endif // CHROME_BROWSER_HOST_ZOOM_MAP_H_
diff --git a/chrome/browser/mime_registry_message_filter.h b/chrome/browser/mime_registry_message_filter.h
index 71348e5..ef1fefb 100644
--- a/chrome/browser/mime_registry_message_filter.h
+++ b/chrome/browser/mime_registry_message_filter.h
@@ -5,27 +5,7 @@
#ifndef CHROME_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
#define CHROME_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
-#include "base/file_path.h"
-#include "chrome/browser/browser_message_filter.h"
-
-class MimeRegistryMessageFilter : public BrowserMessageFilter {
- public:
- MimeRegistryMessageFilter();
-
- virtual void OverrideThreadForMessage(const IPC::Message& message,
- BrowserThread::ID* thread);
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok);
-
- private:
- ~MimeRegistryMessageFilter();
-
- void OnGetMimeTypeFromExtension(const FilePath::StringType& ext,
- std::string* mime_type);
- void OnGetMimeTypeFromFile(const FilePath& file_path,
- std::string* mime_type);
- void OnGetPreferredExtensionForMimeType(const std::string& mime_type,
- FilePath::StringType* extension);
-};
+// TODO(jam): remove this file when all files have been converted.
+#include "content/browser/mime_registry_message_filter.h"
#endif // CHROME_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
diff --git a/chrome/browser/modal_html_dialog_delegate.h b/chrome/browser/modal_html_dialog_delegate.h
index 822d337..dcab1cf 100644
--- a/chrome/browser/modal_html_dialog_delegate.h
+++ b/chrome/browser/modal_html_dialog_delegate.h
@@ -6,63 +6,7 @@
#define CHROME_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_
#pragma once
-#include <vector>
-
-#include "chrome/browser/webui/html_dialog_ui.h"
-#include "chrome/common/notification_observer.h"
-#include "chrome/common/notification_registrar.h"
-
-namespace gfx {
-class Size;
-}
-
-namespace IPC {
-class Message;
-}
-
-// This class can only be used on the UI thread.
-class ModalHtmlDialogDelegate
- : public HtmlDialogUIDelegate,
- public NotificationObserver {
- public:
- ModalHtmlDialogDelegate(const GURL& url,
- int width, int height,
- const std::string& json_arguments,
- IPC::Message* sync_result,
- TabContents* contents);
- ~ModalHtmlDialogDelegate();
-
- // Notification service callback.
- virtual void Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details);
-
- // HTMLDialogUIDelegate implementation:
- virtual bool IsDialogModal() const;
- virtual std::wstring GetDialogTitle() const;
- virtual GURL GetDialogContentURL() const;
- virtual void GetWebUIMessageHandlers(
- std::vector<WebUIMessageHandler*>* handlers) const { }
- virtual void GetDialogSize(gfx::Size* size) const;
- virtual std::string GetDialogArgs() const;
- virtual void OnDialogClosed(const std::string& json_retval);
- virtual void OnCloseContents(TabContents* source, bool* out_close_dialog) { }
- virtual bool ShouldShowDialogTitle() const;
-
- private:
- NotificationRegistrar registrar_;
-
- // The TabContents that opened the dialog.
- TabContents* contents_;
-
- // The parameters needed to display a modal HTML dialog.
- HtmlDialogUI::HtmlDialogParams params_;
-
- // Once we get our reply in OnModalDialogResponse we'll need to respond to the
- // plugin using this |sync_result| pointer so we store it between calls.
- IPC::Message* sync_response_;
-
- DISALLOW_COPY_AND_ASSIGN(ModalHtmlDialogDelegate);
-};
+// TODO(jam): remove this file when all files have been converted.
+#include "content/browser/modal_html_dialog_delegate.h"
#endif // CHROME_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_
diff --git a/chrome/browser/plugin_process_host.h b/chrome/browser/plugin_process_host.h
index 754768fa0..bc657bc 100644
--- a/chrome/browser/plugin_process_host.h
+++ b/chrome/browser/plugin_process_host.h
@@ -6,172 +6,7 @@
#define CHROME_BROWSER_PLUGIN_PROCESS_HOST_H_
#pragma once
-#include "build/build_config.h"
-
-#include <queue>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/ref_counted.h"
-#include "chrome/browser/browser_child_process_host.h"
-#include "chrome/browser/net/resolve_proxy_msg_helper.h"
-#include "ui/gfx/native_widget_types.h"
-#include "webkit/plugins/npapi/webplugininfo.h"
-
-namespace gfx {
-class Rect;
-}
-
-namespace IPC {
-struct ChannelHandle;
-}
-
-class GURL;
-
-// Represents the browser side of the browser <--> plugin communication
-// channel. Different plugins run in their own process, but multiple instances
-// of the same plugin run in the same process. There will be one
-// PluginProcessHost per plugin process, matched with a corresponding
-// PluginProcess running in the plugin process. The browser is responsible for
-// starting the plugin process when a plugin is created that doesn't already
-// have a process. After that, most of the communication is directly between
-// the renderer and plugin processes.
-class PluginProcessHost : public BrowserChildProcessHost,
- public ResolveProxyMsgHelper::Delegate {
- public:
- class Client {
- public:
- // Returns a opaque unique identifier for the process requesting
- // the channel.
- virtual int ID() = 0;
- virtual bool OffTheRecord() = 0;
- virtual void SetPluginInfo(const webkit::npapi::WebPluginInfo& info) = 0;
- // The client should delete itself when one of these methods is called.
- virtual void OnChannelOpened(const IPC::ChannelHandle& handle) = 0;
- virtual void OnError() = 0;
-
- protected:
- virtual ~Client() {}
- };
-
- PluginProcessHost();
- virtual ~PluginProcessHost();
-
- // Initialize the new plugin process, returning true on success. This must
- // be called before the object can be used.
- bool Init(const webkit::npapi::WebPluginInfo& info, const std::string& locale);
-
- // Force the plugin process to shutdown (cleanly).
- virtual void ForceShutdown();
-
- virtual bool OnMessageReceived(const IPC::Message& msg);
- virtual void OnChannelConnected(int32 peer_pid);
- virtual void OnChannelError();
-
- // ResolveProxyMsgHelper::Delegate implementation:
- virtual void OnResolveProxyCompleted(IPC::Message* reply_msg,
- int result,
- const std::string& proxy_list);
-
- // Tells the plugin process to create a new channel for communication with a
- // renderer. When the plugin process responds with the channel name,
- // OnChannelOpened in the client is called.
- void OpenChannelToPlugin(Client* client);
-
- // This function is called on the IO thread once we receive a reply from the
- // modal HTML dialog (in the form of a JSON string). This function forwards
- // that reply back to the plugin that requested the dialog.
- void OnModalDialogResponse(const std::string& json_retval,
- IPC::Message* sync_result);
-
-#if defined(OS_MACOSX)
- // This function is called on the IO thread when the browser becomes the
- // active application.
- void OnAppActivation();
-#endif
-
- const webkit::npapi::WebPluginInfo& info() const { return info_; }
-
-#if defined(OS_WIN)
- // Tracks plugin parent windows created on the browser UI thread.
- void AddWindow(HWND window);
-#endif
-
- private:
- friend class PluginResolveProxyHelper;
-
- // Sends a message to the plugin process to request creation of a new channel
- // for the given mime type.
- void RequestPluginChannel(Client* client);
-
- virtual void OnProcessLaunched();
-
- // Message handlers.
- void OnChannelCreated(const IPC::ChannelHandle& channel_handle);
- void OnGetPluginFinderUrl(std::string* plugin_finder_url);
- void OnGetCookies(uint32 request_context, const GURL& url,
- std::string* cookies);
- void OnAccessFiles(int renderer_id, const std::vector<std::string>& files,
- bool* allowed);
- void OnResolveProxy(const GURL& url, IPC::Message* reply_msg);
- void OnPluginMessage(const std::vector<uint8>& data);
-
-#if defined(OS_WIN)
- void OnPluginWindowDestroyed(HWND window, HWND parent);
- void OnDownloadUrl(const std::string& url, int source_child_unique_id,
- gfx::NativeWindow caller_window);
-#endif
-
-#if defined(USE_X11)
- void OnMapNativeViewId(gfx::NativeViewId id, gfx::PluginWindowHandle* output);
-#endif
-
-#if defined(OS_MACOSX)
- void OnPluginSelectWindow(uint32 window_id, gfx::Rect window_rect,
- bool modal);
- void OnPluginShowWindow(uint32 window_id, gfx::Rect window_rect,
- bool modal);
- void OnPluginHideWindow(uint32 window_id, gfx::Rect window_rect);
- void OnPluginSetCursorVisibility(bool visible);
-#endif
-
- virtual bool CanShutdown();
-
- void CancelRequests();
-
- // These are channel requests that we are waiting to send to the
- // plugin process once the channel is opened.
- std::vector<Client*> pending_requests_;
-
- // These are the channel requests that we have already sent to
- // the plugin process, but haven't heard back about yet.
- std::queue<Client*> sent_requests_;
-
- // Information about the plugin.
- webkit::npapi::WebPluginInfo info_;
-
- // Helper class for handling PluginProcessHost_ResolveProxy messages (manages
- // the requests to the proxy service).
- ResolveProxyMsgHelper resolve_proxy_msg_helper_;
-
-#if defined(OS_WIN)
- // Tracks plugin parent windows created on the UI thread.
- std::set<HWND> plugin_parent_windows_set_;
-#endif
-#if defined(OS_MACOSX)
- // Tracks plugin windows currently visible.
- std::set<uint32> plugin_visible_windows_set_;
- // Tracks full screen windows currently visible.
- std::set<uint32> plugin_fullscreen_windows_set_;
- // Tracks modal windows currently visible.
- std::set<uint32> plugin_modal_windows_set_;
- // Tracks the current visibility of the cursor.
- bool plugin_cursor_visible_;
-#endif
-
- DISALLOW_COPY_AND_ASSIGN(PluginProcessHost);
-};
+// TODO(jam): remove this file when all files have been converted.
+#include "content/browser/plugin_process_host.h"
#endif // CHROME_BROWSER_PLUGIN_PROCESS_HOST_H_
diff --git a/chrome/browser/plugin_service.h b/chrome/browser/plugin_service.h
index 1c0af96..ce56cfb 100644
--- a/chrome/browser/plugin_service.h
+++ b/chrome/browser/plugin_service.h
@@ -2,231 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// This class responds to requests from renderers for the list of plugins, and
-// also a proxy object for plugin instances.
-
#ifndef CHROME_BROWSER_PLUGIN_SERVICE_H_
#define CHROME_BROWSER_PLUGIN_SERVICE_H_
#pragma once
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/file_path.h"
-#include "base/hash_tables.h"
-#include "base/scoped_vector.h"
-#include "base/singleton.h"
-#include "base/synchronization/lock.h"
-#include "base/synchronization/waitable_event_watcher.h"
-#include "build/build_config.h"
-#include "chrome/browser/plugin_process_host.h"
-#include "chrome/browser/ppapi_plugin_process_host.h"
-#include "chrome/common/notification_observer.h"
-#include "chrome/common/notification_registrar.h"
-#include "googleurl/src/gurl.h"
-#include "ipc/ipc_channel_handle.h"
-#include "webkit/plugins/npapi/webplugininfo.h"
-
-#if defined(OS_WIN)
-#include "base/scoped_ptr.h"
-#include "base/win/registry.h"
-#endif
-
-#if defined(OS_LINUX)
-#include "chrome/browser/file_path_watcher/file_path_watcher.h"
-#endif
-
-#if defined(OS_CHROMEOS)
-namespace chromeos {
-class PluginSelectionPolicy;
-}
-#endif
-
-namespace IPC {
-class Message;
-}
-
-class MessageLoop;
-struct PepperPluginInfo;
-class PluginDirWatcherDelegate;
-class Profile;
-class ResourceDispatcherHost;
-
-namespace net {
-class URLRequestContext;
-} // namespace net
-
-// This must be created on the main thread but it's only called on the IO/file
-// thread.
-class PluginService
- : public base::WaitableEventWatcher::Delegate,
- public NotificationObserver {
- public:
- struct OverriddenPlugin {
- int render_process_id;
- int render_view_id;
- GURL url;
- webkit::npapi::WebPluginInfo plugin;
- };
-
- // Initializes the global instance; should be called on startup from the main
- // thread.
- static void InitGlobalInstance(Profile* profile);
-
- // Returns the PluginService singleton.
- static PluginService* GetInstance();
-
- // Load all the plugins that should be loaded for the lifetime of the browser
- // (ie, with the LoadOnStartup flag set).
- void LoadChromePlugins(ResourceDispatcherHost* resource_dispatcher_host);
-
- // Sets/gets the data directory that Chrome plugins should use to store
- // persistent data.
- void SetChromePluginDataDir(const FilePath& data_dir);
- const FilePath& GetChromePluginDataDir();
-
- // Gets the browser's UI locale.
- const std::string& GetUILocale();
-
- // Returns the plugin process host corresponding to the plugin process that
- // has been started by this service. Returns NULL if no process has been
- // started.
- PluginProcessHost* FindNpapiPluginProcess(const FilePath& plugin_path);
- PpapiPluginProcessHost* FindPpapiPluginProcess(const FilePath& plugin_path);
-
- // Returns the plugin process host corresponding to the plugin process that
- // has been started by this service. This will start a process to host the
- // 'plugin_path' if needed. If the process fails to start, the return value
- // is NULL. Must be called on the IO thread.
- PluginProcessHost* FindOrStartNpapiPluginProcess(
- const FilePath& plugin_path);
- PpapiPluginProcessHost* FindOrStartPpapiPluginProcess(
- const FilePath& plugin_path);
-
- // Opens a channel to a plugin process for the given mime type, starting
- // a new plugin process if necessary. This must be called on the IO thread
- // or else a deadlock can occur.
- void OpenChannelToNpapiPlugin(int render_process_id,
- int render_view_id,
- const GURL& url,
- const std::string& mime_type,
- PluginProcessHost::Client* client);
- void OpenChannelToPpapiPlugin(const FilePath& path,
- PpapiPluginProcessHost::Client* client);
-
- // Gets the first allowed plugin in the list of plugins that matches
- // the given url and mime type. Must be called on the FILE thread.
- bool GetFirstAllowedPluginInfo(int render_process_id,
- int render_view_id,
- const GURL& url,
- const std::string& mime_type,
- webkit::npapi::WebPluginInfo* info,
- std::string* actual_mime_type);
-
- // Returns true if the given plugin is allowed to be used by a page with
- // the given URL.
- bool PrivatePluginAllowedForURL(const FilePath& plugin_path, const GURL& url);
-
- // Safe to be called from any thread.
- void OverridePluginForTab(OverriddenPlugin plugin);
-
- // The UI thread's message loop
- MessageLoop* main_message_loop() { return main_message_loop_; }
-
- ResourceDispatcherHost* resource_dispatcher_host() const {
- return resource_dispatcher_host_;
- }
-
- static void EnableChromePlugins(bool enable);
-
- private:
- friend struct DefaultSingletonTraits<PluginService>;
-
- // Creates the PluginService object, but doesn't actually build the plugin
- // list yet. It's generated lazily.
- PluginService();
- ~PluginService();
-
- // base::WaitableEventWatcher::Delegate implementation.
- virtual void OnWaitableEventSignaled(base::WaitableEvent* waitable_event);
-
- // NotificationObserver implementation
- virtual void Observe(NotificationType type, const NotificationSource& source,
- const NotificationDetails& details);
-
- void RegisterPepperPlugins();
-
- // Helper so we can do the plugin lookup on the FILE thread.
- void GetAllowedPluginForOpenChannelToPlugin(
- int render_process_id,
- int render_view_id,
- const GURL& url,
- const std::string& mime_type,
- PluginProcessHost::Client* client);
-
- // Helper so we can finish opening the channel after looking up the
- // plugin.
- void FinishOpenChannelToPlugin(
- const FilePath& plugin_path,
- PluginProcessHost::Client* client);
-
-#if defined(OS_LINUX)
- // Registers a new FilePathWatcher for a given path.
- static void RegisterFilePathWatcher(
- FilePathWatcher* watcher,
- const FilePath& path,
- FilePathWatcher::Delegate* delegate);
-#endif
-
- // The main thread's message loop.
- MessageLoop* main_message_loop_;
-
- // The IO thread's resource dispatcher host.
- ResourceDispatcherHost* resource_dispatcher_host_;
-
- // The data directory that Chrome plugins should use to store persistent data.
- FilePath chrome_plugin_data_dir_;
-
- // The browser's UI locale.
- const std::string ui_locale_;
-
- // Map of plugin paths to the origin they are restricted to. Used for
- // extension-only plugins.
- typedef base::hash_map<FilePath, GURL> PrivatePluginMap;
- PrivatePluginMap private_plugins_;
-
- NotificationRegistrar registrar_;
-
-#if defined(OS_CHROMEOS)
- scoped_refptr<chromeos::PluginSelectionPolicy> plugin_selection_policy_;
-#endif
-
-#if defined(OS_WIN)
- // Registry keys for getting notifications when new plugins are installed.
- base::win::RegKey hkcu_key_;
- base::win::RegKey hklm_key_;
- scoped_ptr<base::WaitableEvent> hkcu_event_;
- scoped_ptr<base::WaitableEvent> hklm_event_;
- base::WaitableEventWatcher hkcu_watcher_;
- base::WaitableEventWatcher hklm_watcher_;
-#endif
-
-#if defined(OS_LINUX)
- ScopedVector<FilePathWatcher> file_watchers_;
- scoped_refptr<PluginDirWatcherDelegate> file_watcher_delegate_;
-#endif
-
- std::vector<PepperPluginInfo> ppapi_plugins_;
-
- // Set to true if chrome plugins are enabled. Defaults to true.
- static bool enable_chrome_plugins_;
-
- std::vector<OverriddenPlugin> overridden_plugins_;
- base::Lock overridden_plugins_lock_;
-
- DISALLOW_COPY_AND_ASSIGN(PluginService);
-};
-
-DISABLE_RUNNABLE_METHOD_REFCOUNT(PluginService);
-
+// TODO(jam): remove this file when all files have been converted.
+#include "content/browser/plugin_service.h"
#endif // CHROME_BROWSER_PLUGIN_SERVICE_H_
diff --git a/chrome/browser/ppapi_plugin_process_host.h b/chrome/browser/ppapi_plugin_process_host.h
index 945195d..2a75065 100644
--- a/chrome/browser/ppapi_plugin_process_host.h
+++ b/chrome/browser/ppapi_plugin_process_host.h
@@ -6,73 +6,8 @@
#define CHROME_BROWSER_PPAPI_PLUGIN_PROCESS_HOST_H_
#pragma once
-#include <queue>
-
-#include "base/basictypes.h"
-#include "base/file_path.h"
-#include "chrome/browser/browser_child_process_host.h"
-
-class PpapiPluginProcessHost : public BrowserChildProcessHost {
- public:
- class Client {
- public:
- // Gets the information about the renderer that's requesting the channel.
- virtual void GetChannelInfo(base::ProcessHandle* renderer_handle,
- int* renderer_id) = 0;
-
- // Called when the channel is asynchronously opened to the plugin or on
- // error. On error, the parameters should be:
- // base::kNullProcessHandle
- // IPC::ChannelHandle()
- virtual void OnChannelOpened(base::ProcessHandle plugin_process_handle,
- const IPC::ChannelHandle& channel_handle) = 0;
- };
-
- // You must call init before doing anything else.
- explicit PpapiPluginProcessHost();
- virtual ~PpapiPluginProcessHost();
-
- // Actually launches the process with the given plugin path. Returns true
- // on success (the process was spawned).
- bool Init(const FilePath& path);
-
- // Opens a new channel to the plugin. The client will be notified when the
- // channel is ready or if there's an error.
- void OpenChannelToPlugin(Client* client);
-
- const FilePath& plugin_path() const { return plugin_path_; }
-
- // The client pointer must remain valid until its callback is issued.
-
- private:
-
- void RequestPluginChannel(Client* client);
-
- virtual bool CanShutdown();
- virtual void OnProcessLaunched();
-
- virtual bool OnMessageReceived(const IPC::Message& msg);
- virtual void OnChannelConnected(int32 peer_pid);
- virtual void OnChannelError();
-
- void CancelRequests();
-
- // IPC message handlers.
- void OnRendererPluginChannelCreated(const IPC::ChannelHandle& handle);
-
- // Channel requests that we are waiting to send to the plugin process once
- // the channel is opened.
- std::vector<Client*> pending_requests_;
-
- // Channel requests that we have already sent to the plugin process, but
- // haven't heard back about yet.
- std::queue<Client*> sent_requests_;
-
- // Path to the plugin library.
- FilePath plugin_path_;
-
- DISALLOW_COPY_AND_ASSIGN(PpapiPluginProcessHost);
-};
+// TODO(jam): remove this file when all files have been converted.
+#include "content/browser/ppapi_plugin_process_host.h"
#endif // CHROME_BROWSER_PPAPI_PLUGIN_PROCESS_HOST_H_
diff --git a/chrome/browser/zygote_host_linux.h b/chrome/browser/zygote_host_linux.h
index bbc00dc..1ad9f0e 100644
--- a/chrome/browser/zygote_host_linux.h
+++ b/chrome/browser/zygote_host_linux.h
@@ -6,93 +6,7 @@
#define CHROME_BROWSER_ZYGOTE_HOST_LINUX_H_
#pragma once
-#include <unistd.h>
-
-#include <string>
-#include <vector>
-
-#include "base/global_descriptors_posix.h"
-#include "base/process.h"
-#include "base/process_util.h"
-#include "base/synchronization/lock.h"
-
-template<typename Type>
-struct DefaultSingletonTraits;
-
-static const char kZygoteMagic[] = "ZYGOTE_OK";
-
-// http://code.google.com/p/chromium/wiki/LinuxZygote
-
-// The zygote host is the interface, in the browser process, to the zygote
-// process.
-class ZygoteHost {
- public:
- // Returns the singleton instance.
- static ZygoteHost* GetInstance();
-
- void Init(const std::string& sandbox_cmd);
-
- // Tries to start a renderer process. Returns its pid on success, otherwise
- // base::kNullProcessHandle;
- pid_t ForkRenderer(const std::vector<std::string>& command_line,
- const base::GlobalDescriptors::Mapping& mapping);
- void EnsureProcessTerminated(pid_t process);
-
- // Get the termination status (and, optionally, the exit code) of
- // the process. |exit_code| is set to the exit code of the child
- // process. (|exit_code| may be NULL.)
- base::TerminationStatus GetTerminationStatus(base::ProcessHandle handle,
- int* exit_code);
-
- // These are the command codes used on the wire between the browser and the
- // zygote.
- enum {
- kCmdFork = 0, // Fork off a new renderer.
- kCmdReap = 1, // Reap a renderer child.
- kCmdGetTerminationStatus = 2, // Check what happend to a child process.
- kCmdGetSandboxStatus = 3, // Read a bitmask of kSandbox*
- };
-
- // These form a bitmask which describes the conditions of the sandbox that
- // the zygote finds itself in.
- enum {
- kSandboxSUID = 1 << 0, // SUID sandbox active
- kSandboxPIDNS = 1 << 1, // SUID sandbox is using the PID namespace
- kSandboxNetNS = 1 << 2, // SUID sandbox is using the network namespace
- kSandboxSeccomp = 1 << 3, // seccomp sandbox active.
- };
-
- pid_t pid() const { return pid_; }
-
- // Returns an int which is a bitmask of kSandbox* values. Only valid after
- // the first render has been forked.
- int sandbox_status() const {
- if (have_read_sandbox_status_word_)
- return sandbox_status_;
- return 0;
- }
-
- // Adjust the OOM score of the given renderer's PID.
- void AdjustRendererOOMScore(base::ProcessHandle process_handle, int score);
-
- private:
- friend struct DefaultSingletonTraits<ZygoteHost>;
- ZygoteHost();
- ~ZygoteHost();
-
- ssize_t ReadReply(void* buf, size_t buflen);
-
- int control_fd_; // the socket to the zygote
- // A lock protecting all communication with the zygote. This lock must be
- // acquired before sending a command and released after the result has been
- // received.
- base::Lock control_lock_;
- pid_t pid_;
- bool init_;
- bool using_suid_sandbox_;
- std::string sandbox_binary_;
- bool have_read_sandbox_status_word_;
- int sandbox_status_;
-};
+// TODO(jam): remove this file when all files have been converted.
+#include "content/browser/zygote_host_linux.h"
#endif // CHROME_BROWSER_ZYGOTE_HOST_LINUX_H_
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index effb387..c06eef3 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1193,10 +1193,6 @@
'browser/google/google_url_tracker.h',
'browser/google/google_util.cc',
'browser/google/google_util.h',
- 'browser/gpu_blacklist.cc',
- 'browser/gpu_blacklist.h',
- 'browser/gpu_process_host.cc',
- 'browser/gpu_process_host.h',
'browser/gpu_process_host_ui_shim.cc',
'browser/gpu_process_host_ui_shim.h',
'browser/hang_monitor/hung_plugin_action.cc',
@@ -1262,8 +1258,6 @@
'browser/history/visit_tracker.h',
'browser/history/visitsegment_database.cc',
'browser/history/visitsegment_database.h',
- 'browser/host_zoom_map.cc',
- 'browser/host_zoom_map.h',
'browser/hung_renderer_dialog.h',
'browser/icon_loader.cc',
'browser/icon_loader.h',
@@ -1401,10 +1395,6 @@
'browser/metrics/metrics_service.h',
'browser/metrics/user_metrics.cc',
'browser/metrics/user_metrics.h',
- 'browser/mime_registry_message_filter.cc',
- 'browser/mime_registry_message_filter.h',
- 'browser/modal_html_dialog_delegate.cc',
- 'browser/modal_html_dialog_delegate.h',
'browser/nacl_host/nacl_broker_host_win.cc',
'browser/nacl_host/nacl_broker_host_win.h',
'browser/nacl_host/nacl_broker_service_win.cc',
@@ -1596,11 +1586,6 @@
'browser/plugin_installer_infobar_delegate.h',
'browser/plugin_observer.cc',
'browser/plugin_observer.h',
- 'browser/plugin_process_host.cc',
- 'browser/plugin_process_host.h',
- 'browser/plugin_process_host_mac.cc',
- 'browser/plugin_service.cc',
- 'browser/plugin_service.h',
'browser/plugin_updater.cc',
'browser/plugin_updater.h',
'browser/policy/asynchronous_policy_loader.cc',
@@ -1659,8 +1644,6 @@
'browser/power_save_blocker_mac.cc',
'browser/power_save_blocker_stub.cc',
'browser/power_save_blocker_win.cc',
- 'browser/ppapi_plugin_process_host.cc',
- 'browser/ppapi_plugin_process_host.h',
'browser/preferences_mac.cc',
'browser/preferences_mac.h',
'browser/prefs/browser_prefs.cc',
@@ -3488,8 +3471,6 @@
'browser/worker_host/worker_process_host.h',
'browser/worker_host/worker_service.cc',
'browser/worker_host/worker_service.h',
- 'browser/zygote_host_linux.cc',
- 'browser/zygote_main_linux.cc',
# These files are generated by GRIT.
'<(grit_out_dir)/grit/component_extension_resources_map.cc',
@@ -3672,12 +3653,6 @@
'browser/jankometer.cc',
'browser/password_manager/login_database_posix.cc',
'browser/power_save_blocker_stub.cc',
- 'browser/renderer_host/backing_store_proxy.cc',
- 'browser/renderer_host/backing_store_proxy.h',
- 'browser/renderer_host/gpu_view_host.cc',
- 'browser/renderer_host/gpu_view_host.h',
- 'browser/renderer_host/video_layer_proxy.cc',
- 'browser/renderer_host/video_layer_proxy.h',
'browser/ui/browser_list_stub.cc',
'browser/ui/crypto_module_password_dialog_nss.cc',
'browser/ui/tabs/dock_info.cc',
@@ -3746,10 +3721,8 @@
'$(SDKROOT)/System/Library/Frameworks/SecurityInterface.framework',
],
'mac_bundle_resources': [
- 'browser/gpu.sb',
'browser/nacl_loader.sb',
'browser/utility.sb',
- 'browser/worker.sb',
],
},
'actions': [
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 67160b1..73342fc 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1318,7 +1318,6 @@
'browser/global_keyboard_shortcuts_mac_unittest.mm',
'browser/google/google_update_settings_unittest.cc',
'browser/google/google_url_tracker_unittest.cc',
- 'browser/gpu_blacklist_unittest.cc',
'browser/ui/gtk/accessibility_event_router_gtk_unittest.cc',
'browser/ui/gtk/bookmark_bar_gtk_unittest.cc',
'browser/ui/gtk/bookmark_editor_gtk_unittest.cc',
@@ -1349,7 +1348,6 @@
'browser/history/url_database_unittest.cc',
'browser/history/visit_database_unittest.cc',
'browser/history/visit_tracker_unittest.cc',
- 'browser/host_zoom_map_unittest.cc',
'browser/importer/firefox_importer_unittest.cc',
'browser/importer/firefox_importer_unittest_messages_internal.h',
'browser/importer/firefox_importer_unittest_utils.h',
@@ -1401,7 +1399,6 @@
'browser/password_manager/password_store_mac_unittest.cc',
'browser/password_manager/password_store_win_unittest.cc',
'browser/plugin_exceptions_table_model_unittest.cc',
- 'browser/plugin_service_unittest.cc',
'browser/policy/asynchronous_policy_loader_unittest.cc',
'browser/policy/asynchronous_policy_provider_unittest.cc',
'browser/policy/asynchronous_policy_test_base.cc',
@@ -1851,6 +1848,9 @@
'tools/convert_dict/convert_dict_unittest.cc',
'../content/browser/browser_thread_unittest.cc',
'../content/browser/child_process_security_policy_unittest.cc',
+ '../content/browser/gpu_blacklist_unittest.cc',
+ '../content/browser/host_zoom_map_unittest.cc',
+ '../content/browser/plugin_service_unittest.cc',
'../content/browser/renderer_host/audio_renderer_host_unittest.cc',
'../content/browser/renderer_host/render_widget_host_unittest.cc',
'../content/browser/renderer_host/resource_dispatcher_host_unittest.cc',
@@ -2262,7 +2262,6 @@
'browser/net/cookie_policy_browsertest.cc',
'browser/net/ftp_browsertest.cc',
'browser/plugin_data_remover_browsertest.cc',
- 'browser/plugin_service_browsertest.cc',
'browser/policy/device_management_backend_mock.cc',
'browser/policy/device_management_backend_mock.h',
'browser/policy/device_management_service_browsertest.cc',
@@ -2325,6 +2324,7 @@
'test/render_view_test.cc',
'test/render_view_test.h',
'../content/browser/child_process_security_policy_browsertest.cc',
+ '../content/browser/plugin_service_browsertest.cc',
],
'conditions': [
['chromeos==0', {
diff --git a/content/DEPS b/content/DEPS
index bd39303..ffab3e2 100644
--- a/content/DEPS
+++ b/content/DEPS
@@ -13,6 +13,7 @@ include_rules = [
"+net",
"+ppapi",
"+printing",
+ "+sandbox",
"+skia",
# Don't allow inclusion of these other libs we shouldn't be calling directly.
diff --git a/chrome/browser/gpu.sb b/content/browser/gpu.sb
index 346bcfa..346bcfa 100644
--- a/chrome/browser/gpu.sb
+++ b/content/browser/gpu.sb
diff --git a/chrome/browser/gpu_blacklist.cc b/content/browser/gpu_blacklist.cc
index a09b807..544a656 100644
--- a/chrome/browser/gpu_blacklist.cc
+++ b/content/browser/gpu_blacklist.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/gpu_blacklist.h"
+#include "content/browser/gpu_blacklist.h"
#include "base/json/json_reader.h"
#include "base/logging.h"
diff --git a/content/browser/gpu_blacklist.h b/content/browser/gpu_blacklist.h
new file mode 100644
index 0000000..f732af9
--- /dev/null
+++ b/content/browser/gpu_blacklist.h
@@ -0,0 +1,227 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_GPU_BLACKLIST_H_
+#define CONTENT_BROWSER_GPU_BLACKLIST_H_
+#pragma once
+
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/scoped_ptr.h"
+#include "chrome/common/gpu_feature_flags.h"
+
+class DictionaryValue;
+class GPUInfo;
+class Version;
+
+class GpuBlacklist {
+ public:
+ enum OsType {
+ kOsLinux,
+ kOsMacosx,
+ kOsWin,
+ kOsAny,
+ kOsUnknown
+ };
+
+ GpuBlacklist();
+ ~GpuBlacklist();
+
+ // Loads blacklist information from a json file.
+ // current_os_only==true indicates all blacklist entries that don't belong to
+ // the current OS are discarded; current_os_only==false should only be used
+ // for testing purpose.
+ // If failed, the current GpuBlacklist is un-touched.
+ bool LoadGpuBlacklist(const std::string& json_context,
+ bool current_os_only);
+
+ // Collects system information and combines them with gpu_info and blacklist
+ // information to determine gpu feature flags.
+ // If os is kOsAny, use the current OS; if os_version is null, use the
+ // current OS version.
+ GpuFeatureFlags DetermineGpuFeatureFlags(OsType os,
+ Version* os_version,
+ const GPUInfo& gpu_info);
+
+ // Collects the entries that set the "feature" flag from the last
+ // DetermineGpuFeatureFlags() call. This tells which entries are responsible
+ // for raising a certain flag, i.e, for blacklisting a certain feature.
+ // Examples of "feature":
+ // kGpuFeatureAll - any of the supported features;
+ // kGpuFeatureWebgl - a single feature;
+ // kGpuFeatureWebgl | kGpuFeatureAcceleratedCompositing - two features.
+ void GetGpuFeatureFlagEntries(GpuFeatureFlags::GpuFeatureType feature,
+ std::vector<uint32>& entry_ids) const;
+
+ // Return the largest entry id. This is used for histogramming.
+ uint32 max_entry_id() const;
+
+ // Collects the version of the current blacklist. Returns false and sets
+ // major and minor to 0 on failure.
+ bool GetVersion(uint16* major, uint16* monir) const;
+
+ private:
+ class VersionInfo {
+ public:
+ VersionInfo(const std::string& version_op,
+ const std::string& version_string,
+ const std::string& version_string2);
+ ~VersionInfo();
+
+ // Determines if a given version is included in the VersionInfo range.
+ bool Contains(const Version& version) const;
+
+ // Determines if the VersionInfo contains valid information.
+ bool IsValid() const;
+
+ private:
+ enum Op {
+ kBetween, // <= * <=
+ kEQ, // =
+ kLT, // <
+ kLE, // <=
+ kGT, // >
+ kGE, // >=
+ kAny,
+ kUnknown // Indicates VersionInfo data is invalid.
+ };
+
+ // Maps string to Op; returns kUnknown if it's not a valid Op.
+ static Op StringToOp(const std::string& version_op);
+
+ Op op_;
+ scoped_ptr<Version> version_;
+ scoped_ptr<Version> version2_;
+ };
+
+ class OsInfo {
+ public:
+ OsInfo(const std::string& os,
+ const std::string& version_op,
+ const std::string& version_string,
+ const std::string& version_string2);
+ ~OsInfo();
+
+ // Determines if a given os/version is included in the OsInfo set.
+ bool Contains(OsType type, const Version& version) const;
+
+ // Determines if the VersionInfo contains valid information.
+ bool IsValid() const;
+
+ OsType type() const;
+
+ // Maps string to OsType; returns kOsUnknown if it's not a valid os.
+ static OsType StringToOsType(const std::string& os);
+
+ private:
+ OsType type_;
+ scoped_ptr<VersionInfo> version_info_;
+ };
+
+ class StringInfo {
+ public:
+ StringInfo(const std::string& string_op, const std::string& string_value);
+
+ // Determines if a given string is included in the StringInfo.
+ bool Contains(const std::string& value) const;
+
+ // Determines if the StringInfo contains valid information.
+ bool IsValid() const;
+
+ private:
+ enum Op {
+ kContains,
+ kBeginWith,
+ kEndWith,
+ kEQ, // =
+ kUnknown // Indicates StringInfo data is invalid.
+ };
+
+ // Maps string to Op; returns kUnknown if it's not a valid Op.
+ static Op StringToOp(const std::string& string_op);
+
+ Op op_;
+ std::string value_;
+ };
+
+ class GpuBlacklistEntry {
+ public:
+ // Constructs GpuBlacklistEntry from DictionaryValue loaded from json.
+ static GpuBlacklistEntry* GetGpuBlacklistEntryFromValue(
+ DictionaryValue* value);
+
+ // Determines if a given os/gc/driver is included in the Entry set.
+ bool Contains(OsType os_type,
+ const Version& os_version,
+ const GPUInfo& gpu_info) const;
+
+ // Returns the OsType.
+ OsType GetOsType() const;
+
+ // Returns the entry's unique id. 0 is reserved.
+ uint32 id() const;
+
+ // Returns the GpuFeatureFlags.
+ GpuFeatureFlags GetGpuFeatureFlags() const;
+
+ ~GpuBlacklistEntry();
+
+ private:
+ GpuBlacklistEntry();
+
+ bool SetId(const std::string& id_string);
+
+ bool SetOsInfo(const std::string& os,
+ const std::string& version_op,
+ const std::string& version_string,
+ const std::string& version_string2);
+
+ bool SetVendorId(const std::string& vendor_id_string);
+
+ bool SetDeviceId(const std::string& device_id_string);
+
+ bool SetDriverVendorInfo(const std::string& vendor_op,
+ const std::string& vendor_value);
+
+ bool SetDriverVersionInfo(const std::string& version_op,
+ const std::string& version_string,
+ const std::string& version_string2);
+
+ bool SetGLRendererInfo(const std::string& renderer_op,
+ const std::string& renderer_value);
+
+ bool SetBlacklistedFeatures(
+ const std::vector<std::string>& blacklisted_features);
+
+ uint32 id_;
+ scoped_ptr<OsInfo> os_info_;
+ uint32 vendor_id_;
+ uint32 device_id_;
+ scoped_ptr<StringInfo> driver_vendor_info_;
+ scoped_ptr<VersionInfo> driver_version_info_;
+ scoped_ptr<StringInfo> gl_renderer_info_;
+ scoped_ptr<GpuFeatureFlags> feature_flags_;
+ };
+
+ // Gets the current OS type.
+ static OsType GetOsType();
+
+ void Clear();
+
+ scoped_ptr<Version> version_;
+ std::vector<GpuBlacklistEntry*> blacklist_;
+
+ // This records all the blacklist entries that are appliable to the current
+ // user machine. It is updated everytime DetermineGpuFeatureFlags() is
+ // called and is used later by GetGpuFeatureFlagEntries().
+ std::vector<GpuBlacklistEntry*> active_entries_;
+
+ uint32 max_entry_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(GpuBlacklist);
+};
+
+#endif // CONTENT_BROWSER_GPU_BLACKLIST_H_
diff --git a/chrome/browser/gpu_blacklist_unittest.cc b/content/browser/gpu_blacklist_unittest.cc
index a61cd28..e2b496d 100644
--- a/chrome/browser/gpu_blacklist_unittest.cc
+++ b/content/browser/gpu_blacklist_unittest.cc
@@ -5,8 +5,8 @@
#include <vector>
#include "base/version.h"
-#include "chrome/browser/gpu_blacklist.h"
#include "chrome/common/gpu_info.h"
+#include "content/browser/gpu_blacklist.h"
#include "testing/gtest/include/gtest/gtest.h"
TEST(GpuBlacklistTest, BlacklistLogic) {
diff --git a/chrome/browser/gpu_process_host.cc b/content/browser/gpu_process_host.cc
index ab6ec14..4ef366a 100644
--- a/chrome/browser/gpu_process_host.cc
+++ b/content/browser/gpu_process_host.cc
@@ -2,17 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/gpu_process_host.h"
+#include "content/browser/gpu_process_host.h"
#include "app/app_switches.h"
#include "base/metrics/histogram.h"
#include "base/ref_counted.h"
#include "base/string_piece.h"
#include "base/threading/thread.h"
-#include "chrome/browser/browser_thread.h"
#include "chrome/browser/gpu_process_host_ui_shim.h"
-#include "chrome/browser/renderer_host/render_widget_host.h"
-#include "chrome/browser/renderer_host/render_widget_host_view.h"
#include "chrome/browser/tab_contents/render_view_host_delegate_helper.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/gpu_feature_flags.h"
@@ -20,6 +17,9 @@
#include "chrome/common/gpu_messages.h"
#include "chrome/common/render_messages.h"
#include "chrome/gpu/gpu_thread.h"
+#include "content/browser/browser_thread.h"
+#include "content/browser/renderer_host/render_widget_host.h"
+#include "content/browser/renderer_host/render_widget_host_view.h"
#include "ipc/ipc_channel_handle.h"
#include "ipc/ipc_switches.h"
#include "media/base/media_switches.h"
diff --git a/content/browser/gpu_process_host.h b/content/browser/gpu_process_host.h
new file mode 100644
index 0000000..9881bee
--- /dev/null
+++ b/content/browser/gpu_process_host.h
@@ -0,0 +1,54 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_GPU_PROCESS_HOST_H_
+#define CONTENT_BROWSER_GPU_PROCESS_HOST_H_
+#pragma once
+
+#include "base/threading/non_thread_safe.h"
+#include "content/browser/browser_child_process_host.h"
+
+namespace IPC {
+class Message;
+}
+
+class GpuProcessHost : public BrowserChildProcessHost,
+ public base::NonThreadSafe {
+ public:
+
+ // Create a GpuProcessHost with the given ID. The object can be found using
+ // FromID with the same id.
+ static GpuProcessHost* Create(int host_id);
+
+ // Get the GPU process host for the GPU process with the given ID. Returns
+ // null if the process no longer exists.
+ static GpuProcessHost* FromID(int host_id);
+
+ virtual bool Send(IPC::Message* msg);
+
+ // IPC::Channel::Listener implementation.
+ virtual bool OnMessageReceived(const IPC::Message& message);
+
+ private:
+ explicit GpuProcessHost(int host_id);
+ virtual ~GpuProcessHost();
+ bool Init();
+
+ // Post an IPC message to the UI shim's message handler on the UI thread.
+ void RouteOnUIThread(const IPC::Message& message);
+
+ virtual bool CanShutdown();
+ virtual void OnChildDied();
+ virtual void OnProcessCrashed(int exit_code);
+
+ bool CanLaunchGpuProcess() const;
+ bool LaunchGpuProcess();
+
+ // The serial number of the GpuProcessHost / GpuProcessHostUIShim pair.
+ int host_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(GpuProcessHost);
+};
+
+#endif // CONTENT_BROWSER_GPU_PROCESS_HOST_H_
diff --git a/chrome/browser/host_zoom_map.cc b/content/browser/host_zoom_map.cc
index 3dc257b..0581036 100644
--- a/chrome/browser/host_zoom_map.cc
+++ b/content/browser/host_zoom_map.cc
@@ -4,7 +4,7 @@
#include <cmath>
-#include "chrome/browser/host_zoom_map.h"
+#include "content/browser/host_zoom_map.h"
#include "base/string_piece.h"
#include "base/utf_string_conversions.h"
@@ -12,13 +12,13 @@
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prefs/scoped_pref_update.h"
#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/renderer_host/render_process_host.h"
-#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/common/notification_details.h"
#include "chrome/common/notification_service.h"
#include "chrome/common/notification_source.h"
#include "chrome/common/notification_type.h"
#include "chrome/common/pref_names.h"
+#include "content/browser/renderer_host/render_process_host.h"
+#include "content/browser/renderer_host/render_view_host.h"
#include "googleurl/src/gurl.h"
#include "net/base/net_util.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
diff --git a/content/browser/host_zoom_map.h b/content/browser/host_zoom_map.h
new file mode 100644
index 0000000..4951995
--- /dev/null
+++ b/content/browser/host_zoom_map.h
@@ -0,0 +1,127 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Maps hostnames to custom zoom levels. Written on the UI thread and read on
+// any thread. One instance per profile.
+
+#ifndef CONTENT_BROWSER_HOST_ZOOM_MAP_H_
+#define CONTENT_BROWSER_HOST_ZOOM_MAP_H_
+#pragma once
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/ref_counted.h"
+#include "base/synchronization/lock.h"
+#include "chrome/browser/prefs/pref_change_registrar.h"
+#include "chrome/common/notification_observer.h"
+#include "chrome/common/notification_registrar.h"
+#include "content/browser/browser_thread.h"
+
+class GURL;
+class PrefService;
+class Profile;
+
+// HostZoomMap needs to be deleted on the UI thread because it listens
+// to notifications on there (and holds a NotificationRegistrar).
+class HostZoomMap :
+ public NotificationObserver,
+ public base::RefCountedThreadSafe<HostZoomMap,
+ BrowserThread::DeleteOnUIThread> {
+ public:
+ explicit HostZoomMap(Profile* profile);
+
+ static void RegisterUserPrefs(PrefService* prefs);
+
+ // Returns the zoom level for a given url. The zoom level is determined by
+ // the host portion of the URL, or (in the absence of a host) the complete
+ // spec of the URL. In most cases, there is no custom zoom level, and this
+ // returns the user's default zoom level. Otherwise, returns the saved zoom
+ // level, which may be positive (to zoom in) or negative (to zoom out).
+ //
+ // This may be called on any thread.
+ double GetZoomLevel(const GURL& url) const;
+
+ // Sets the zoom level for a given url to |level|. If the level matches the
+ // current default zoom level, the host is erased from the saved preferences;
+ // otherwise the new value is written out.
+ //
+ // This should only be called on the UI thread.
+ void SetZoomLevel(const GURL& url, double level);
+
+ // Returns the temporary zoom level that's only valid for the lifetime of
+ // the given tab (i.e. isn't saved and doesn't affect other tabs) if it
+ // exists, the default zoom level otherwise.
+ //
+ // This may be called on any thread.
+ double GetTemporaryZoomLevel(int render_process_id,
+ int render_view_id) const;
+
+ // Sets the temporary zoom level that's only valid for the lifetime of this
+ // tab.
+ //
+ // This should only be called on the UI thread.
+ void SetTemporaryZoomLevel(int render_process_id,
+ int render_view_id,
+ double level);
+
+ // Resets all zoom levels.
+ //
+ // This should only be called on the UI thread.
+ void ResetToDefaults();
+
+ // NotificationObserver implementation.
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ private:
+ friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>;
+ friend class DeleteTask<HostZoomMap>;
+
+ typedef std::map<std::string, double> HostZoomLevels;
+
+ ~HostZoomMap();
+
+ // Reads the zoom levels from the preferences service.
+ void Load();
+
+ // Removes dependencies on the profile so we can live longer than
+ // the profile without crashing.
+ void Shutdown();
+
+ // The profile we're associated with.
+ Profile* profile_;
+
+ // Copy of the pref data, so that we can read it on the IO thread.
+ HostZoomLevels host_zoom_levels_;
+ double default_zoom_level_;
+
+ struct TemporaryZoomLevel {
+ int render_process_id;
+ int render_view_id;
+ double zoom_level;
+ };
+
+ // Don't expect more than a couple of tabs that are using a temporary zoom
+ // level, so vector is fine for now.
+ std::vector<TemporaryZoomLevel> temporary_zoom_levels_;
+
+ // Used around accesses to |host_zoom_levels_|, |default_zoom_level_| and
+ // |temporary_zoom_levels_| to guarantee thread safety.
+ mutable base::Lock lock_;
+
+ // Whether we are currently updating preferences, this is used to ignore
+ // notifications from the preference service that we triggered ourself.
+ bool updating_preferences_;
+
+ NotificationRegistrar registrar_;
+ PrefChangeRegistrar pref_change_registrar_;
+
+ DISALLOW_COPY_AND_ASSIGN(HostZoomMap);
+};
+
+#endif // CONTENT_BROWSER_HOST_ZOOM_MAP_H_
diff --git a/chrome/browser/host_zoom_map_unittest.cc b/content/browser/host_zoom_map_unittest.cc
index 82e0e58..82e0e58 100644
--- a/chrome/browser/host_zoom_map_unittest.cc
+++ b/content/browser/host_zoom_map_unittest.cc
diff --git a/chrome/browser/mime_registry_message_filter.cc b/content/browser/mime_registry_message_filter.cc
index c57cad3..3268b84 100644
--- a/chrome/browser/mime_registry_message_filter.cc
+++ b/content/browser/mime_registry_message_filter.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/mime_registry_message_filter.h"
+#include "content/browser/mime_registry_message_filter.h"
#include "chrome/common/mime_registry_messages.h"
#include "net/base/mime_util.h"
diff --git a/content/browser/mime_registry_message_filter.h b/content/browser/mime_registry_message_filter.h
new file mode 100644
index 0000000..87b5b24
--- /dev/null
+++ b/content/browser/mime_registry_message_filter.h
@@ -0,0 +1,31 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
+#define CONTENT_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
+
+#include "base/file_path.h"
+#include "chrome/browser/browser_message_filter.h"
+
+class MimeRegistryMessageFilter : public BrowserMessageFilter {
+ public:
+ MimeRegistryMessageFilter();
+
+ virtual void OverrideThreadForMessage(const IPC::Message& message,
+ BrowserThread::ID* thread);
+ virtual bool OnMessageReceived(const IPC::Message& message,
+ bool* message_was_ok);
+
+ private:
+ ~MimeRegistryMessageFilter();
+
+ void OnGetMimeTypeFromExtension(const FilePath::StringType& ext,
+ std::string* mime_type);
+ void OnGetMimeTypeFromFile(const FilePath& file_path,
+ std::string* mime_type);
+ void OnGetPreferredExtensionForMimeType(const std::string& mime_type,
+ FilePath::StringType* extension);
+};
+
+#endif // CONTENT_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
diff --git a/chrome/browser/modal_html_dialog_delegate.cc b/content/browser/modal_html_dialog_delegate.cc
index 5999d3d..0f2ca4d 100644
--- a/chrome/browser/modal_html_dialog_delegate.cc
+++ b/content/browser/modal_html_dialog_delegate.cc
@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/modal_html_dialog_delegate.h"
+#include "content/browser/modal_html_dialog_delegate.h"
#include <string>
#include "chrome/browser/browser_list.h"
-#include "chrome/browser/renderer_host/render_view_host.h"
-#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/notification_source.h"
+#include "content/browser/renderer_host/render_view_host.h"
+#include "content/browser/tab_contents/tab_contents.h"
#include "ui/gfx/size.h"
ModalHtmlDialogDelegate::ModalHtmlDialogDelegate(
diff --git a/content/browser/modal_html_dialog_delegate.h b/content/browser/modal_html_dialog_delegate.h
new file mode 100644
index 0000000..642acd8
--- /dev/null
+++ b/content/browser/modal_html_dialog_delegate.h
@@ -0,0 +1,68 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_
+#define CONTENT_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_
+#pragma once
+
+#include <vector>
+
+#include "chrome/browser/webui/html_dialog_ui.h"
+#include "chrome/common/notification_observer.h"
+#include "chrome/common/notification_registrar.h"
+
+namespace gfx {
+class Size;
+}
+
+namespace IPC {
+class Message;
+}
+
+// This class can only be used on the UI thread.
+class ModalHtmlDialogDelegate
+ : public HtmlDialogUIDelegate,
+ public NotificationObserver {
+ public:
+ ModalHtmlDialogDelegate(const GURL& url,
+ int width, int height,
+ const std::string& json_arguments,
+ IPC::Message* sync_result,
+ TabContents* contents);
+ ~ModalHtmlDialogDelegate();
+
+ // Notification service callback.
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ // HTMLDialogUIDelegate implementation:
+ virtual bool IsDialogModal() const;
+ virtual std::wstring GetDialogTitle() const;
+ virtual GURL GetDialogContentURL() const;
+ virtual void GetWebUIMessageHandlers(
+ std::vector<WebUIMessageHandler*>* handlers) const { }
+ virtual void GetDialogSize(gfx::Size* size) const;
+ virtual std::string GetDialogArgs() const;
+ virtual void OnDialogClosed(const std::string& json_retval);
+ virtual void OnCloseContents(TabContents* source, bool* out_close_dialog) { }
+ virtual bool ShouldShowDialogTitle() const;
+
+ private:
+ NotificationRegistrar registrar_;
+
+ // The TabContents that opened the dialog.
+ TabContents* contents_;
+
+ // The parameters needed to display a modal HTML dialog.
+ HtmlDialogUI::HtmlDialogParams params_;
+
+ // Once we get our reply in OnModalDialogResponse we'll need to respond to the
+ // plugin using this |sync_result| pointer so we store it between calls.
+ IPC::Message* sync_response_;
+
+ DISALLOW_COPY_AND_ASSIGN(ModalHtmlDialogDelegate);
+};
+
+#endif // CONTENT_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_
diff --git a/chrome/browser/plugin_process_host.cc b/content/browser/plugin_process_host.cc
index c15b030..215f653 100644
--- a/chrome/browser/plugin_process_host.cc
+++ b/content/browser/plugin_process_host.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/plugin_process_host.h"
+#include "content/browser/plugin_process_host.h"
#if defined(OS_WIN)
#include <windows.h>
@@ -20,15 +20,11 @@
#include "base/path_service.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
-#include "chrome/browser/browser_thread.h"
-#include "chrome/browser/child_process_security_policy.h"
#include "chrome/browser/chrome_plugin_browsing_context.h"
#include "chrome/browser/net/url_request_tracking.h"
#include "chrome/browser/plugin_download_helper.h"
#include "chrome/browser/plugin_service.h"
#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
-#include "chrome/browser/renderer_host/resource_message_filter.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_plugin_lib.h"
#include "chrome/common/chrome_switches.h"
@@ -37,6 +33,10 @@
#include "chrome/common/plugin_messages.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/render_messages_params.h"
+#include "content/browser/browser_thread.h"
+#include "content/browser/child_process_security_policy.h"
+#include "content/browser/renderer_host/resource_dispatcher_host.h"
+#include "content/browser/renderer_host/resource_message_filter.h"
#include "ipc/ipc_switches.h"
#include "net/base/cookie_store.h"
#include "net/base/io_buffer.h"
diff --git a/content/browser/plugin_process_host.h b/content/browser/plugin_process_host.h
new file mode 100644
index 0000000..ad44aae
--- /dev/null
+++ b/content/browser/plugin_process_host.h
@@ -0,0 +1,177 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_PLUGIN_PROCESS_HOST_H_
+#define CONTENT_BROWSER_PLUGIN_PROCESS_HOST_H_
+#pragma once
+
+#include "build/build_config.h"
+
+#include <queue>
+#include <set>
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/ref_counted.h"
+#include "chrome/browser/net/resolve_proxy_msg_helper.h"
+#include "content/browser/browser_child_process_host.h"
+#include "ui/gfx/native_widget_types.h"
+#include "webkit/plugins/npapi/webplugininfo.h"
+
+namespace gfx {
+class Rect;
+}
+
+namespace IPC {
+struct ChannelHandle;
+}
+
+class GURL;
+
+// Represents the browser side of the browser <--> plugin communication
+// channel. Different plugins run in their own process, but multiple instances
+// of the same plugin run in the same process. There will be one
+// PluginProcessHost per plugin process, matched with a corresponding
+// PluginProcess running in the plugin process. The browser is responsible for
+// starting the plugin process when a plugin is created that doesn't already
+// have a process. After that, most of the communication is directly between
+// the renderer and plugin processes.
+class PluginProcessHost : public BrowserChildProcessHost,
+ public ResolveProxyMsgHelper::Delegate {
+ public:
+ class Client {
+ public:
+ // Returns a opaque unique identifier for the process requesting
+ // the channel.
+ virtual int ID() = 0;
+ virtual bool OffTheRecord() = 0;
+ virtual void SetPluginInfo(const webkit::npapi::WebPluginInfo& info) = 0;
+ // The client should delete itself when one of these methods is called.
+ virtual void OnChannelOpened(const IPC::ChannelHandle& handle) = 0;
+ virtual void OnError() = 0;
+
+ protected:
+ virtual ~Client() {}
+ };
+
+ PluginProcessHost();
+ virtual ~PluginProcessHost();
+
+ // Initialize the new plugin process, returning true on success. This must
+ // be called before the object can be used.
+ bool Init(const webkit::npapi::WebPluginInfo& info, const std::string& locale);
+
+ // Force the plugin process to shutdown (cleanly).
+ virtual void ForceShutdown();
+
+ virtual bool OnMessageReceived(const IPC::Message& msg);
+ virtual void OnChannelConnected(int32 peer_pid);
+ virtual void OnChannelError();
+
+ // ResolveProxyMsgHelper::Delegate implementation:
+ virtual void OnResolveProxyCompleted(IPC::Message* reply_msg,
+ int result,
+ const std::string& proxy_list);
+
+ // Tells the plugin process to create a new channel for communication with a
+ // renderer. When the plugin process responds with the channel name,
+ // OnChannelOpened in the client is called.
+ void OpenChannelToPlugin(Client* client);
+
+ // This function is called on the IO thread once we receive a reply from the
+ // modal HTML dialog (in the form of a JSON string). This function forwards
+ // that reply back to the plugin that requested the dialog.
+ void OnModalDialogResponse(const std::string& json_retval,
+ IPC::Message* sync_result);
+
+#if defined(OS_MACOSX)
+ // This function is called on the IO thread when the browser becomes the
+ // active application.
+ void OnAppActivation();
+#endif
+
+ const webkit::npapi::WebPluginInfo& info() const { return info_; }
+
+#if defined(OS_WIN)
+ // Tracks plugin parent windows created on the browser UI thread.
+ void AddWindow(HWND window);
+#endif
+
+ private:
+ friend class PluginResolveProxyHelper;
+
+ // Sends a message to the plugin process to request creation of a new channel
+ // for the given mime type.
+ void RequestPluginChannel(Client* client);
+
+ virtual void OnProcessLaunched();
+
+ // Message handlers.
+ void OnChannelCreated(const IPC::ChannelHandle& channel_handle);
+ void OnGetPluginFinderUrl(std::string* plugin_finder_url);
+ void OnGetCookies(uint32 request_context, const GURL& url,
+ std::string* cookies);
+ void OnAccessFiles(int renderer_id, const std::vector<std::string>& files,
+ bool* allowed);
+ void OnResolveProxy(const GURL& url, IPC::Message* reply_msg);
+ void OnPluginMessage(const std::vector<uint8>& data);
+
+#if defined(OS_WIN)
+ void OnPluginWindowDestroyed(HWND window, HWND parent);
+ void OnDownloadUrl(const std::string& url, int source_child_unique_id,
+ gfx::NativeWindow caller_window);
+#endif
+
+#if defined(USE_X11)
+ void OnMapNativeViewId(gfx::NativeViewId id, gfx::PluginWindowHandle* output);
+#endif
+
+#if defined(OS_MACOSX)
+ void OnPluginSelectWindow(uint32 window_id, gfx::Rect window_rect,
+ bool modal);
+ void OnPluginShowWindow(uint32 window_id, gfx::Rect window_rect,
+ bool modal);
+ void OnPluginHideWindow(uint32 window_id, gfx::Rect window_rect);
+ void OnPluginSetCursorVisibility(bool visible);
+#endif
+
+ virtual bool CanShutdown();
+
+ void CancelRequests();
+
+ // These are channel requests that we are waiting to send to the
+ // plugin process once the channel is opened.
+ std::vector<Client*> pending_requests_;
+
+ // These are the channel requests that we have already sent to
+ // the plugin process, but haven't heard back about yet.
+ std::queue<Client*> sent_requests_;
+
+ // Information about the plugin.
+ webkit::npapi::WebPluginInfo info_;
+
+ // Helper class for handling PluginProcessHost_ResolveProxy messages (manages
+ // the requests to the proxy service).
+ ResolveProxyMsgHelper resolve_proxy_msg_helper_;
+
+#if defined(OS_WIN)
+ // Tracks plugin parent windows created on the UI thread.
+ std::set<HWND> plugin_parent_windows_set_;
+#endif
+#if defined(OS_MACOSX)
+ // Tracks plugin windows currently visible.
+ std::set<uint32> plugin_visible_windows_set_;
+ // Tracks full screen windows currently visible.
+ std::set<uint32> plugin_fullscreen_windows_set_;
+ // Tracks modal windows currently visible.
+ std::set<uint32> plugin_modal_windows_set_;
+ // Tracks the current visibility of the cursor.
+ bool plugin_cursor_visible_;
+#endif
+
+ DISALLOW_COPY_AND_ASSIGN(PluginProcessHost);
+};
+
+#endif // CONTENT_BROWSER_PLUGIN_PROCESS_HOST_H_
diff --git a/chrome/browser/plugin_process_host_mac.cc b/content/browser/plugin_process_host_mac.cc
index 18616fd..b329f2b 100644
--- a/chrome/browser/plugin_process_host_mac.cc
+++ b/content/browser/plugin_process_host_mac.cc
@@ -10,9 +10,9 @@
#include "base/logging.h"
#include "base/mac/mac_util.h"
-#include "chrome/browser/browser_thread.h"
-#include "chrome/browser/plugin_process_host.h"
#include "chrome/common/plugin_messages.h"
+#include "content/browser/browser_thread.h"
+#include "content/browser/plugin_process_host.h"
#include "ui/gfx/rect.h"
void PluginProcessHost::OnPluginSelectWindow(uint32 window_id,
diff --git a/chrome/browser/plugin_service.cc b/content/browser/plugin_service.cc
index 8abeee6..756dbac 100644
--- a/chrome/browser/plugin_service.cc
+++ b/content/browser/plugin_service.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/plugin_service.h"
+#include "content/browser/plugin_service.h"
#include <vector>
@@ -14,14 +14,11 @@
#include "base/values.h"
#include "base/synchronization/waitable_event.h"
#include "chrome/browser/browser_process.h"
-#include "chrome/browser/browser_thread.h"
#include "chrome/browser/chrome_plugin_host.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/plugin_updater.h"
#include "chrome/browser/ppapi_plugin_process_host.h"
#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/renderer_host/render_process_host.h"
-#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/common/chrome_plugin_lib.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
@@ -34,6 +31,9 @@
#include "chrome/common/pepper_plugin_registry.h"
#include "chrome/common/plugin_messages.h"
#include "chrome/common/render_messages.h"
+#include "content/browser/browser_thread.h"
+#include "content/browser/renderer_host/render_process_host.h"
+#include "content/browser/renderer_host/render_view_host.h"
#include "webkit/plugins/npapi/plugin_constants_win.h"
#include "webkit/plugins/npapi/plugin_list.h"
#include "webkit/plugins/npapi/webplugininfo.h"
diff --git a/content/browser/plugin_service.h b/content/browser/plugin_service.h
new file mode 100644
index 0000000..f9bc49cd
--- /dev/null
+++ b/content/browser/plugin_service.h
@@ -0,0 +1,232 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This class responds to requests from renderers for the list of plugins, and
+// also a proxy object for plugin instances.
+
+#ifndef CONTENT_BROWSER_PLUGIN_SERVICE_H_
+#define CONTENT_BROWSER_PLUGIN_SERVICE_H_
+#pragma once
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/file_path.h"
+#include "base/hash_tables.h"
+#include "base/scoped_vector.h"
+#include "base/singleton.h"
+#include "base/synchronization/lock.h"
+#include "base/synchronization/waitable_event_watcher.h"
+#include "build/build_config.h"
+#include "chrome/common/notification_observer.h"
+#include "chrome/common/notification_registrar.h"
+#include "content/browser/plugin_process_host.h"
+#include "content/browser/ppapi_plugin_process_host.h"
+#include "googleurl/src/gurl.h"
+#include "ipc/ipc_channel_handle.h"
+#include "webkit/plugins/npapi/webplugininfo.h"
+
+#if defined(OS_WIN)
+#include "base/scoped_ptr.h"
+#include "base/win/registry.h"
+#endif
+
+#if defined(OS_LINUX)
+#include "chrome/browser/file_path_watcher/file_path_watcher.h"
+#endif
+
+#if defined(OS_CHROMEOS)
+namespace chromeos {
+class PluginSelectionPolicy;
+}
+#endif
+
+namespace IPC {
+class Message;
+}
+
+class MessageLoop;
+struct PepperPluginInfo;
+class PluginDirWatcherDelegate;
+class Profile;
+class ResourceDispatcherHost;
+
+namespace net {
+class URLRequestContext;
+} // namespace net
+
+// This must be created on the main thread but it's only called on the IO/file
+// thread.
+class PluginService
+ : public base::WaitableEventWatcher::Delegate,
+ public NotificationObserver {
+ public:
+ struct OverriddenPlugin {
+ int render_process_id;
+ int render_view_id;
+ GURL url;
+ webkit::npapi::WebPluginInfo plugin;
+ };
+
+ // Initializes the global instance; should be called on startup from the main
+ // thread.
+ static void InitGlobalInstance(Profile* profile);
+
+ // Returns the PluginService singleton.
+ static PluginService* GetInstance();
+
+ // Load all the plugins that should be loaded for the lifetime of the browser
+ // (ie, with the LoadOnStartup flag set).
+ void LoadChromePlugins(ResourceDispatcherHost* resource_dispatcher_host);
+
+ // Sets/gets the data directory that Chrome plugins should use to store
+ // persistent data.
+ void SetChromePluginDataDir(const FilePath& data_dir);
+ const FilePath& GetChromePluginDataDir();
+
+ // Gets the browser's UI locale.
+ const std::string& GetUILocale();
+
+ // Returns the plugin process host corresponding to the plugin process that
+ // has been started by this service. Returns NULL if no process has been
+ // started.
+ PluginProcessHost* FindNpapiPluginProcess(const FilePath& plugin_path);
+ PpapiPluginProcessHost* FindPpapiPluginProcess(const FilePath& plugin_path);
+
+ // Returns the plugin process host corresponding to the plugin process that
+ // has been started by this service. This will start a process to host the
+ // 'plugin_path' if needed. If the process fails to start, the return value
+ // is NULL. Must be called on the IO thread.
+ PluginProcessHost* FindOrStartNpapiPluginProcess(
+ const FilePath& plugin_path);
+ PpapiPluginProcessHost* FindOrStartPpapiPluginProcess(
+ const FilePath& plugin_path);
+
+ // Opens a channel to a plugin process for the given mime type, starting
+ // a new plugin process if necessary. This must be called on the IO thread
+ // or else a deadlock can occur.
+ void OpenChannelToNpapiPlugin(int render_process_id,
+ int render_view_id,
+ const GURL& url,
+ const std::string& mime_type,
+ PluginProcessHost::Client* client);
+ void OpenChannelToPpapiPlugin(const FilePath& path,
+ PpapiPluginProcessHost::Client* client);
+
+ // Gets the first allowed plugin in the list of plugins that matches
+ // the given url and mime type. Must be called on the FILE thread.
+ bool GetFirstAllowedPluginInfo(int render_process_id,
+ int render_view_id,
+ const GURL& url,
+ const std::string& mime_type,
+ webkit::npapi::WebPluginInfo* info,
+ std::string* actual_mime_type);
+
+ // Returns true if the given plugin is allowed to be used by a page with
+ // the given URL.
+ bool PrivatePluginAllowedForURL(const FilePath& plugin_path, const GURL& url);
+
+ // Safe to be called from any thread.
+ void OverridePluginForTab(OverriddenPlugin plugin);
+
+ // The UI thread's message loop
+ MessageLoop* main_message_loop() { return main_message_loop_; }
+
+ ResourceDispatcherHost* resource_dispatcher_host() const {
+ return resource_dispatcher_host_;
+ }
+
+ static void EnableChromePlugins(bool enable);
+
+ private:
+ friend struct DefaultSingletonTraits<PluginService>;
+
+ // Creates the PluginService object, but doesn't actually build the plugin
+ // list yet. It's generated lazily.
+ PluginService();
+ ~PluginService();
+
+ // base::WaitableEventWatcher::Delegate implementation.
+ virtual void OnWaitableEventSignaled(base::WaitableEvent* waitable_event);
+
+ // NotificationObserver implementation
+ virtual void Observe(NotificationType type, const NotificationSource& source,
+ const NotificationDetails& details);
+
+ void RegisterPepperPlugins();
+
+ // Helper so we can do the plugin lookup on the FILE thread.
+ void GetAllowedPluginForOpenChannelToPlugin(
+ int render_process_id,
+ int render_view_id,
+ const GURL& url,
+ const std::string& mime_type,
+ PluginProcessHost::Client* client);
+
+ // Helper so we can finish opening the channel after looking up the
+ // plugin.
+ void FinishOpenChannelToPlugin(
+ const FilePath& plugin_path,
+ PluginProcessHost::Client* client);
+
+#if defined(OS_LINUX)
+ // Registers a new FilePathWatcher for a given path.
+ static void RegisterFilePathWatcher(
+ FilePathWatcher* watcher,
+ const FilePath& path,
+ FilePathWatcher::Delegate* delegate);
+#endif
+
+ // The main thread's message loop.
+ MessageLoop* main_message_loop_;
+
+ // The IO thread's resource dispatcher host.
+ ResourceDispatcherHost* resource_dispatcher_host_;
+
+ // The data directory that Chrome plugins should use to store persistent data.
+ FilePath chrome_plugin_data_dir_;
+
+ // The browser's UI locale.
+ const std::string ui_locale_;
+
+ // Map of plugin paths to the origin they are restricted to. Used for
+ // extension-only plugins.
+ typedef base::hash_map<FilePath, GURL> PrivatePluginMap;
+ PrivatePluginMap private_plugins_;
+
+ NotificationRegistrar registrar_;
+
+#if defined(OS_CHROMEOS)
+ scoped_refptr<chromeos::PluginSelectionPolicy> plugin_selection_policy_;
+#endif
+
+#if defined(OS_WIN)
+ // Registry keys for getting notifications when new plugins are installed.
+ base::win::RegKey hkcu_key_;
+ base::win::RegKey hklm_key_;
+ scoped_ptr<base::WaitableEvent> hkcu_event_;
+ scoped_ptr<base::WaitableEvent> hklm_event_;
+ base::WaitableEventWatcher hkcu_watcher_;
+ base::WaitableEventWatcher hklm_watcher_;
+#endif
+
+#if defined(OS_LINUX)
+ ScopedVector<FilePathWatcher> file_watchers_;
+ scoped_refptr<PluginDirWatcherDelegate> file_watcher_delegate_;
+#endif
+
+ std::vector<PepperPluginInfo> ppapi_plugins_;
+
+ // Set to true if chrome plugins are enabled. Defaults to true.
+ static bool enable_chrome_plugins_;
+
+ std::vector<OverriddenPlugin> overridden_plugins_;
+ base::Lock overridden_plugins_lock_;
+
+ DISALLOW_COPY_AND_ASSIGN(PluginService);
+};
+
+DISABLE_RUNNABLE_METHOD_REFCOUNT(PluginService);
+
+#endif // CONTENT_BROWSER_PLUGIN_SERVICE_H_
diff --git a/chrome/browser/plugin_service_browsertest.cc b/content/browser/plugin_service_browsertest.cc
index ee1be0c..2a0edb5 100644
--- a/chrome/browser/plugin_service_browsertest.cc
+++ b/content/browser/plugin_service_browsertest.cc
@@ -2,13 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/plugin_service.h"
+#include "content/browser/plugin_service.h"
#include "base/auto_reset.h"
#include "base/command_line.h"
-#include "chrome/browser/browser_thread.h"
#include "chrome/test/in_process_browser_test.h"
#include "chrome/test/testing_profile.h"
+#include "content/browser/browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "webkit/plugins/npapi/plugin_list.h"
diff --git a/chrome/browser/plugin_service_unittest.cc b/content/browser/plugin_service_unittest.cc
index 6950d2a..0fbde87 100644
--- a/chrome/browser/plugin_service_unittest.cc
+++ b/content/browser/plugin_service_unittest.cc
@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/plugin_service.h"
+#include "content/browser/plugin_service.h"
#include "base/auto_reset.h"
#include "base/command_line.h"
-#include "chrome/browser/browser_thread.h"
#include "chrome/test/testing_profile.h"
+#include "content/browser/browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
diff --git a/chrome/browser/ppapi_plugin_process_host.cc b/content/browser/ppapi_plugin_process_host.cc
index c319dd0..def01b7d 100644
--- a/chrome/browser/ppapi_plugin_process_host.cc
+++ b/content/browser/ppapi_plugin_process_host.cc
@@ -2,15 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/ppapi_plugin_process_host.h"
+#include "content/browser/ppapi_plugin_process_host.h"
#include "base/command_line.h"
#include "base/file_path.h"
#include "base/process_util.h"
-#include "chrome/browser/plugin_service.h"
-#include "chrome/browser/renderer_host/render_message_filter.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/render_messages.h"
+#include "content/browser/plugin_service.h"
+#include "content/browser/renderer_host/render_message_filter.h"
#include "ipc/ipc_switches.h"
#include "ppapi/proxy/ppapi_messages.h"
diff --git a/content/browser/ppapi_plugin_process_host.h b/content/browser/ppapi_plugin_process_host.h
new file mode 100644
index 0000000..baeaf3b
--- /dev/null
+++ b/content/browser/ppapi_plugin_process_host.h
@@ -0,0 +1,78 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_PPAPI_PLUGIN_PROCESS_HOST_H_
+#define CONTENT_BROWSER_PPAPI_PLUGIN_PROCESS_HOST_H_
+#pragma once
+
+#include <queue>
+
+#include "base/basictypes.h"
+#include "base/file_path.h"
+#include "content/browser/browser_child_process_host.h"
+
+class PpapiPluginProcessHost : public BrowserChildProcessHost {
+ public:
+ class Client {
+ public:
+ // Gets the information about the renderer that's requesting the channel.
+ virtual void GetChannelInfo(base::ProcessHandle* renderer_handle,
+ int* renderer_id) = 0;
+
+ // Called when the channel is asynchronously opened to the plugin or on
+ // error. On error, the parameters should be:
+ // base::kNullProcessHandle
+ // IPC::ChannelHandle()
+ virtual void OnChannelOpened(base::ProcessHandle plugin_process_handle,
+ const IPC::ChannelHandle& channel_handle) = 0;
+ };
+
+ // You must call init before doing anything else.
+ explicit PpapiPluginProcessHost();
+ virtual ~PpapiPluginProcessHost();
+
+ // Actually launches the process with the given plugin path. Returns true
+ // on success (the process was spawned).
+ bool Init(const FilePath& path);
+
+ // Opens a new channel to the plugin. The client will be notified when the
+ // channel is ready or if there's an error.
+ void OpenChannelToPlugin(Client* client);
+
+ const FilePath& plugin_path() const { return plugin_path_; }
+
+ // The client pointer must remain valid until its callback is issued.
+
+ private:
+
+ void RequestPluginChannel(Client* client);
+
+ virtual bool CanShutdown();
+ virtual void OnProcessLaunched();
+
+ virtual bool OnMessageReceived(const IPC::Message& msg);
+ virtual void OnChannelConnected(int32 peer_pid);
+ virtual void OnChannelError();
+
+ void CancelRequests();
+
+ // IPC message handlers.
+ void OnRendererPluginChannelCreated(const IPC::ChannelHandle& handle);
+
+ // Channel requests that we are waiting to send to the plugin process once
+ // the channel is opened.
+ std::vector<Client*> pending_requests_;
+
+ // Channel requests that we have already sent to the plugin process, but
+ // haven't heard back about yet.
+ std::queue<Client*> sent_requests_;
+
+ // Path to the plugin library.
+ FilePath plugin_path_;
+
+ DISALLOW_COPY_AND_ASSIGN(PpapiPluginProcessHost);
+};
+
+#endif // CONTENT_BROWSER_PPAPI_PLUGIN_PROCESS_HOST_H_
+
diff --git a/chrome/browser/worker.sb b/content/browser/worker.sb
index c984670..c984670 100644
--- a/chrome/browser/worker.sb
+++ b/content/browser/worker.sb
diff --git a/chrome/browser/zygote_host_linux.cc b/content/browser/zygote_host_linux.cc
index ad6b0726..3b6f1fb 100644
--- a/chrome/browser/zygote_host_linux.cc
+++ b/content/browser/zygote_host_linux.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/zygote_host_linux.h"
+#include "content/browser/zygote_host_linux.h"
#include <sys/socket.h>
#include <sys/stat.h>
@@ -21,12 +21,12 @@
#include "base/string_util.h"
#include "base/scoped_ptr.h"
#include "base/utf_string_conversions.h"
-#include "chrome/browser/renderer_host/render_sandbox_host_linux.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/process_watcher.h"
#include "chrome/common/result_codes.h"
#include "chrome/common/unix_domain_socket_posix.h"
+#include "content/browser/renderer_host/render_sandbox_host_linux.h"
#include "sandbox/linux/suid/suid_unsafe_environment_variables.h"
static void SaveSUIDUnsafeEnvironmentVariables() {
diff --git a/content/browser/zygote_host_linux.h b/content/browser/zygote_host_linux.h
new file mode 100644
index 0000000..5ead5f5
--- /dev/null
+++ b/content/browser/zygote_host_linux.h
@@ -0,0 +1,98 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_ZYGOTE_HOST_LINUX_H_
+#define CONTENT_BROWSER_ZYGOTE_HOST_LINUX_H_
+#pragma once
+
+#include <unistd.h>
+
+#include <string>
+#include <vector>
+
+#include "base/global_descriptors_posix.h"
+#include "base/process.h"
+#include "base/process_util.h"
+#include "base/synchronization/lock.h"
+
+template<typename Type>
+struct DefaultSingletonTraits;
+
+static const char kZygoteMagic[] = "ZYGOTE_OK";
+
+// http://code.google.com/p/chromium/wiki/LinuxZygote
+
+// The zygote host is the interface, in the browser process, to the zygote
+// process.
+class ZygoteHost {
+ public:
+ // Returns the singleton instance.
+ static ZygoteHost* GetInstance();
+
+ void Init(const std::string& sandbox_cmd);
+
+ // Tries to start a renderer process. Returns its pid on success, otherwise
+ // base::kNullProcessHandle;
+ pid_t ForkRenderer(const std::vector<std::string>& command_line,
+ const base::GlobalDescriptors::Mapping& mapping);
+ void EnsureProcessTerminated(pid_t process);
+
+ // Get the termination status (and, optionally, the exit code) of
+ // the process. |exit_code| is set to the exit code of the child
+ // process. (|exit_code| may be NULL.)
+ base::TerminationStatus GetTerminationStatus(base::ProcessHandle handle,
+ int* exit_code);
+
+ // These are the command codes used on the wire between the browser and the
+ // zygote.
+ enum {
+ kCmdFork = 0, // Fork off a new renderer.
+ kCmdReap = 1, // Reap a renderer child.
+ kCmdGetTerminationStatus = 2, // Check what happend to a child process.
+ kCmdGetSandboxStatus = 3, // Read a bitmask of kSandbox*
+ };
+
+ // These form a bitmask which describes the conditions of the sandbox that
+ // the zygote finds itself in.
+ enum {
+ kSandboxSUID = 1 << 0, // SUID sandbox active
+ kSandboxPIDNS = 1 << 1, // SUID sandbox is using the PID namespace
+ kSandboxNetNS = 1 << 2, // SUID sandbox is using the network namespace
+ kSandboxSeccomp = 1 << 3, // seccomp sandbox active.
+ };
+
+ pid_t pid() const { return pid_; }
+
+ // Returns an int which is a bitmask of kSandbox* values. Only valid after
+ // the first render has been forked.
+ int sandbox_status() const {
+ if (have_read_sandbox_status_word_)
+ return sandbox_status_;
+ return 0;
+ }
+
+ // Adjust the OOM score of the given renderer's PID.
+ void AdjustRendererOOMScore(base::ProcessHandle process_handle, int score);
+
+ private:
+ friend struct DefaultSingletonTraits<ZygoteHost>;
+ ZygoteHost();
+ ~ZygoteHost();
+
+ ssize_t ReadReply(void* buf, size_t buflen);
+
+ int control_fd_; // the socket to the zygote
+ // A lock protecting all communication with the zygote. This lock must be
+ // acquired before sending a command and released after the result has been
+ // received.
+ base::Lock control_lock_;
+ pid_t pid_;
+ bool init_;
+ bool using_suid_sandbox_;
+ std::string sandbox_binary_;
+ bool have_read_sandbox_status_word_;
+ int sandbox_status_;
+};
+
+#endif // CONTENT_BROWSER_ZYGOTE_HOST_LINUX_H_
diff --git a/chrome/browser/zygote_main_linux.cc b/content/browser/zygote_main_linux.cc
index b03e59c..188ad34 100644
--- a/chrome/browser/zygote_main_linux.cc
+++ b/content/browser/zygote_main_linux.cc
@@ -19,6 +19,8 @@
#include <selinux/context.h>
#endif
+#include "content/browser/zygote_host_linux.h"
+
#include "base/basictypes.h"
#include "base/command_line.h"
#include "base/eintr_wrapper.h"
@@ -33,7 +35,6 @@
#include "base/scoped_ptr.h"
#include "base/sys_info.h"
#include "build/build_config.h"
-#include "chrome/browser/zygote_host_linux.h"
#include "chrome/common/chrome_descriptors.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/font_config_ipc_linux.h"
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index 4a5a09a..f497bf5 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -46,6 +46,23 @@
'browser/cross_site_request_manager.h',
'browser/disposition_utils.cc',
'browser/disposition_utils.h',
+ 'browser/gpu_blacklist.cc',
+ 'browser/gpu_blacklist.h',
+ 'browser/gpu_process_host.cc',
+ 'browser/gpu_process_host.h',
+ 'browser/host_zoom_map.cc',
+ 'browser/host_zoom_map.h',
+ 'browser/mime_registry_message_filter.cc',
+ 'browser/mime_registry_message_filter.h',
+ 'browser/modal_html_dialog_delegate.cc',
+ 'browser/modal_html_dialog_delegate.h',
+ 'browser/ppapi_plugin_process_host.cc',
+ 'browser/ppapi_plugin_process_host.h',
+ 'browser/plugin_process_host.cc',
+ 'browser/plugin_process_host.h',
+ 'browser/plugin_process_host_mac.cc',
+ 'browser/plugin_service.cc',
+ 'browser/plugin_service.h',
'browser/renderer_host/accelerated_surface_container_mac.cc',
'browser/renderer_host/accelerated_surface_container_mac.h',
'browser/renderer_host/accelerated_surface_container_manager_mac.cc',
@@ -156,6 +173,9 @@
'browser/tab_contents/tab_contents_observer.h',
'browser/tab_contents/tab_contents_view.cc',
'browser/tab_contents/tab_contents_view.h',
+ 'browser/zygote_host_linux.cc',
+ 'browser/zygote_host_linux.h',
+ 'browser/zygote_main_linux.cc',
],
'conditions': [
['OS=="win"', {
@@ -177,6 +197,14 @@
'browser/certificate_manager_model.h',
],
}],
+ ['OS=="mac"', {
+ 'link_settings': {
+ 'mac_bundle_resources': [
+ 'browser/gpu.sb',
+ 'browser/worker.sb',
+ ],
+ },
+ }],
],
},
],