Move the rest of the core files in chrome\browser to content\browser.
TBR=avi Review URL: http://codereview.chromium.org/6538111 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75711 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
chrome
browser
child_process_launcher.hgpu_blacklist.hgpu_process_host.hgpu_process_host_ui_shim.cchost_zoom_map.hmime_registry_message_filter.hmodal_html_dialog_delegate.hplugin_process_host.hplugin_service.hppapi_plugin_process_host.hzygote_host_linux.h
chrome_browser.gypichrome_tests.gypicontent
DEPS
browser
gpu.sbgpu_blacklist.ccgpu_blacklist.hgpu_blacklist_unittest.ccgpu_process_host.ccgpu_process_host.hhost_zoom_map.cchost_zoom_map.hhost_zoom_map_unittest.ccmime_registry_message_filter.ccmime_registry_message_filter.hmodal_html_dialog_delegate.ccmodal_html_dialog_delegate.hplugin_process_host.ccplugin_process_host.hplugin_process_host_mac.ccplugin_service.ccplugin_service.hplugin_service_browsertest.ccplugin_service_unittest.ccppapi_plugin_process_host.ccppapi_plugin_process_host.hworker.sbzygote_host_linux.cczygote_host_linux.hzygote_main_linux.cc
content_browser.gypi@ -9,5 +9,4 @@
|
|||||||
// TODO(jam): remove this file when all files have been converted.
|
// TODO(jam): remove this file when all files have been converted.
|
||||||
#include "content/browser/child_process_launcher.h"
|
#include "content/browser/child_process_launcher.h"
|
||||||
|
|
||||||
|
|
||||||
#endif // CHROME_BROWSER_CHILD_PROCESS_LAUNCHER_H_
|
#endif // CHROME_BROWSER_CHILD_PROCESS_LAUNCHER_H_
|
||||||
|
@ -6,223 +6,8 @@
|
|||||||
#define CHROME_BROWSER_GPU_BLACKLIST_H_
|
#define CHROME_BROWSER_GPU_BLACKLIST_H_
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
// TODO(jam): remove this file when all files have been converted.
|
||||||
#include <vector>
|
#include "content/browser/gpu_blacklist.h"
|
||||||
|
|
||||||
#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 // CHROME_BROWSER_GPU_BLACKLIST_H_
|
#endif // CHROME_BROWSER_GPU_BLACKLIST_H_
|
||||||
|
|
||||||
|
@ -6,49 +6,7 @@
|
|||||||
#define CHROME_BROWSER_GPU_PROCESS_HOST_H_
|
#define CHROME_BROWSER_GPU_PROCESS_HOST_H_
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "base/threading/non_thread_safe.h"
|
// TODO(jam): remove this file when all files have been converted.
|
||||||
#include "chrome/browser/browser_child_process_host.h"
|
#include "content/browser/gpu_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 // CHROME_BROWSER_GPU_PROCESS_HOST_H_
|
#endif // CHROME_BROWSER_GPU_PROCESS_HOST_H_
|
||||||
|
@ -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.
|
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
@ -2,126 +2,11 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// 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_
|
#ifndef CHROME_BROWSER_HOST_ZOOM_MAP_H_
|
||||||
#define CHROME_BROWSER_HOST_ZOOM_MAP_H_
|
#define CHROME_BROWSER_HOST_ZOOM_MAP_H_
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <map>
|
// TODO(jam): remove this file when all files have been converted.
|
||||||
#include <string>
|
#include "content/browser/host_zoom_map.h"
|
||||||
#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);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CHROME_BROWSER_HOST_ZOOM_MAP_H_
|
#endif // CHROME_BROWSER_HOST_ZOOM_MAP_H_
|
||||||
|
@ -5,27 +5,7 @@
|
|||||||
#ifndef CHROME_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
|
#ifndef CHROME_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
|
||||||
#define CHROME_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
|
#define CHROME_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
|
||||||
|
|
||||||
#include "base/file_path.h"
|
// TODO(jam): remove this file when all files have been converted.
|
||||||
#include "chrome/browser/browser_message_filter.h"
|
#include "content/browser/mime_registry_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 // CHROME_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
|
#endif // CHROME_BROWSER_MIME_REGISTRY_MESSAGE_FILTER_H_
|
||||||
|
@ -6,63 +6,7 @@
|
|||||||
#define CHROME_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_
|
#define CHROME_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <vector>
|
// TODO(jam): remove this file when all files have been converted.
|
||||||
|
#include "content/browser/modal_html_dialog_delegate.h"
|
||||||
#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 // CHROME_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_
|
#endif // CHROME_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_
|
||||||
|
@ -6,172 +6,7 @@
|
|||||||
#define CHROME_BROWSER_PLUGIN_PROCESS_HOST_H_
|
#define CHROME_BROWSER_PLUGIN_PROCESS_HOST_H_
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "build/build_config.h"
|
// TODO(jam): remove this file when all files have been converted.
|
||||||
|
#include "content/browser/plugin_process_host.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);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CHROME_BROWSER_PLUGIN_PROCESS_HOST_H_
|
#endif // CHROME_BROWSER_PLUGIN_PROCESS_HOST_H_
|
||||||
|
@ -2,231 +2,10 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// 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_
|
#ifndef CHROME_BROWSER_PLUGIN_SERVICE_H_
|
||||||
#define CHROME_BROWSER_PLUGIN_SERVICE_H_
|
#define CHROME_BROWSER_PLUGIN_SERVICE_H_
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
// TODO(jam): remove this file when all files have been converted.
|
||||||
|
#include "content/browser/plugin_service.h"
|
||||||
#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);
|
|
||||||
|
|
||||||
#endif // CHROME_BROWSER_PLUGIN_SERVICE_H_
|
#endif // CHROME_BROWSER_PLUGIN_SERVICE_H_
|
||||||
|
@ -6,73 +6,8 @@
|
|||||||
#define CHROME_BROWSER_PPAPI_PLUGIN_PROCESS_HOST_H_
|
#define CHROME_BROWSER_PPAPI_PLUGIN_PROCESS_HOST_H_
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <queue>
|
// TODO(jam): remove this file when all files have been converted.
|
||||||
|
#include "content/browser/ppapi_plugin_process_host.h"
|
||||||
#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);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CHROME_BROWSER_PPAPI_PLUGIN_PROCESS_HOST_H_
|
#endif // CHROME_BROWSER_PPAPI_PLUGIN_PROCESS_HOST_H_
|
||||||
|
|
||||||
|
@ -6,93 +6,7 @@
|
|||||||
#define CHROME_BROWSER_ZYGOTE_HOST_LINUX_H_
|
#define CHROME_BROWSER_ZYGOTE_HOST_LINUX_H_
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <unistd.h>
|
// TODO(jam): remove this file when all files have been converted.
|
||||||
|
#include "content/browser/zygote_host_linux.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 // CHROME_BROWSER_ZYGOTE_HOST_LINUX_H_
|
#endif // CHROME_BROWSER_ZYGOTE_HOST_LINUX_H_
|
||||||
|
@ -1193,10 +1193,6 @@
|
|||||||
'browser/google/google_url_tracker.h',
|
'browser/google/google_url_tracker.h',
|
||||||
'browser/google/google_util.cc',
|
'browser/google/google_util.cc',
|
||||||
'browser/google/google_util.h',
|
'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.cc',
|
||||||
'browser/gpu_process_host_ui_shim.h',
|
'browser/gpu_process_host_ui_shim.h',
|
||||||
'browser/hang_monitor/hung_plugin_action.cc',
|
'browser/hang_monitor/hung_plugin_action.cc',
|
||||||
@ -1262,8 +1258,6 @@
|
|||||||
'browser/history/visit_tracker.h',
|
'browser/history/visit_tracker.h',
|
||||||
'browser/history/visitsegment_database.cc',
|
'browser/history/visitsegment_database.cc',
|
||||||
'browser/history/visitsegment_database.h',
|
'browser/history/visitsegment_database.h',
|
||||||
'browser/host_zoom_map.cc',
|
|
||||||
'browser/host_zoom_map.h',
|
|
||||||
'browser/hung_renderer_dialog.h',
|
'browser/hung_renderer_dialog.h',
|
||||||
'browser/icon_loader.cc',
|
'browser/icon_loader.cc',
|
||||||
'browser/icon_loader.h',
|
'browser/icon_loader.h',
|
||||||
@ -1401,10 +1395,6 @@
|
|||||||
'browser/metrics/metrics_service.h',
|
'browser/metrics/metrics_service.h',
|
||||||
'browser/metrics/user_metrics.cc',
|
'browser/metrics/user_metrics.cc',
|
||||||
'browser/metrics/user_metrics.h',
|
'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.cc',
|
||||||
'browser/nacl_host/nacl_broker_host_win.h',
|
'browser/nacl_host/nacl_broker_host_win.h',
|
||||||
'browser/nacl_host/nacl_broker_service_win.cc',
|
'browser/nacl_host/nacl_broker_service_win.cc',
|
||||||
@ -1596,11 +1586,6 @@
|
|||||||
'browser/plugin_installer_infobar_delegate.h',
|
'browser/plugin_installer_infobar_delegate.h',
|
||||||
'browser/plugin_observer.cc',
|
'browser/plugin_observer.cc',
|
||||||
'browser/plugin_observer.h',
|
'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.cc',
|
||||||
'browser/plugin_updater.h',
|
'browser/plugin_updater.h',
|
||||||
'browser/policy/asynchronous_policy_loader.cc',
|
'browser/policy/asynchronous_policy_loader.cc',
|
||||||
@ -1659,8 +1644,6 @@
|
|||||||
'browser/power_save_blocker_mac.cc',
|
'browser/power_save_blocker_mac.cc',
|
||||||
'browser/power_save_blocker_stub.cc',
|
'browser/power_save_blocker_stub.cc',
|
||||||
'browser/power_save_blocker_win.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.cc',
|
||||||
'browser/preferences_mac.h',
|
'browser/preferences_mac.h',
|
||||||
'browser/prefs/browser_prefs.cc',
|
'browser/prefs/browser_prefs.cc',
|
||||||
@ -3488,8 +3471,6 @@
|
|||||||
'browser/worker_host/worker_process_host.h',
|
'browser/worker_host/worker_process_host.h',
|
||||||
'browser/worker_host/worker_service.cc',
|
'browser/worker_host/worker_service.cc',
|
||||||
'browser/worker_host/worker_service.h',
|
'browser/worker_host/worker_service.h',
|
||||||
'browser/zygote_host_linux.cc',
|
|
||||||
'browser/zygote_main_linux.cc',
|
|
||||||
|
|
||||||
# These files are generated by GRIT.
|
# These files are generated by GRIT.
|
||||||
'<(grit_out_dir)/grit/component_extension_resources_map.cc',
|
'<(grit_out_dir)/grit/component_extension_resources_map.cc',
|
||||||
@ -3672,12 +3653,6 @@
|
|||||||
'browser/jankometer.cc',
|
'browser/jankometer.cc',
|
||||||
'browser/password_manager/login_database_posix.cc',
|
'browser/password_manager/login_database_posix.cc',
|
||||||
'browser/power_save_blocker_stub.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/browser_list_stub.cc',
|
||||||
'browser/ui/crypto_module_password_dialog_nss.cc',
|
'browser/ui/crypto_module_password_dialog_nss.cc',
|
||||||
'browser/ui/tabs/dock_info.cc',
|
'browser/ui/tabs/dock_info.cc',
|
||||||
@ -3746,10 +3721,8 @@
|
|||||||
'$(SDKROOT)/System/Library/Frameworks/SecurityInterface.framework',
|
'$(SDKROOT)/System/Library/Frameworks/SecurityInterface.framework',
|
||||||
],
|
],
|
||||||
'mac_bundle_resources': [
|
'mac_bundle_resources': [
|
||||||
'browser/gpu.sb',
|
|
||||||
'browser/nacl_loader.sb',
|
'browser/nacl_loader.sb',
|
||||||
'browser/utility.sb',
|
'browser/utility.sb',
|
||||||
'browser/worker.sb',
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'actions': [
|
'actions': [
|
||||||
|
@ -1318,7 +1318,6 @@
|
|||||||
'browser/global_keyboard_shortcuts_mac_unittest.mm',
|
'browser/global_keyboard_shortcuts_mac_unittest.mm',
|
||||||
'browser/google/google_update_settings_unittest.cc',
|
'browser/google/google_update_settings_unittest.cc',
|
||||||
'browser/google/google_url_tracker_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/accessibility_event_router_gtk_unittest.cc',
|
||||||
'browser/ui/gtk/bookmark_bar_gtk_unittest.cc',
|
'browser/ui/gtk/bookmark_bar_gtk_unittest.cc',
|
||||||
'browser/ui/gtk/bookmark_editor_gtk_unittest.cc',
|
'browser/ui/gtk/bookmark_editor_gtk_unittest.cc',
|
||||||
@ -1349,7 +1348,6 @@
|
|||||||
'browser/history/url_database_unittest.cc',
|
'browser/history/url_database_unittest.cc',
|
||||||
'browser/history/visit_database_unittest.cc',
|
'browser/history/visit_database_unittest.cc',
|
||||||
'browser/history/visit_tracker_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.cc',
|
||||||
'browser/importer/firefox_importer_unittest_messages_internal.h',
|
'browser/importer/firefox_importer_unittest_messages_internal.h',
|
||||||
'browser/importer/firefox_importer_unittest_utils.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_mac_unittest.cc',
|
||||||
'browser/password_manager/password_store_win_unittest.cc',
|
'browser/password_manager/password_store_win_unittest.cc',
|
||||||
'browser/plugin_exceptions_table_model_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_loader_unittest.cc',
|
||||||
'browser/policy/asynchronous_policy_provider_unittest.cc',
|
'browser/policy/asynchronous_policy_provider_unittest.cc',
|
||||||
'browser/policy/asynchronous_policy_test_base.cc',
|
'browser/policy/asynchronous_policy_test_base.cc',
|
||||||
@ -1851,6 +1848,9 @@
|
|||||||
'tools/convert_dict/convert_dict_unittest.cc',
|
'tools/convert_dict/convert_dict_unittest.cc',
|
||||||
'../content/browser/browser_thread_unittest.cc',
|
'../content/browser/browser_thread_unittest.cc',
|
||||||
'../content/browser/child_process_security_policy_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/audio_renderer_host_unittest.cc',
|
||||||
'../content/browser/renderer_host/render_widget_host_unittest.cc',
|
'../content/browser/renderer_host/render_widget_host_unittest.cc',
|
||||||
'../content/browser/renderer_host/resource_dispatcher_host_unittest.cc',
|
'../content/browser/renderer_host/resource_dispatcher_host_unittest.cc',
|
||||||
@ -2262,7 +2262,6 @@
|
|||||||
'browser/net/cookie_policy_browsertest.cc',
|
'browser/net/cookie_policy_browsertest.cc',
|
||||||
'browser/net/ftp_browsertest.cc',
|
'browser/net/ftp_browsertest.cc',
|
||||||
'browser/plugin_data_remover_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.cc',
|
||||||
'browser/policy/device_management_backend_mock.h',
|
'browser/policy/device_management_backend_mock.h',
|
||||||
'browser/policy/device_management_service_browsertest.cc',
|
'browser/policy/device_management_service_browsertest.cc',
|
||||||
@ -2325,6 +2324,7 @@
|
|||||||
'test/render_view_test.cc',
|
'test/render_view_test.cc',
|
||||||
'test/render_view_test.h',
|
'test/render_view_test.h',
|
||||||
'../content/browser/child_process_security_policy_browsertest.cc',
|
'../content/browser/child_process_security_policy_browsertest.cc',
|
||||||
|
'../content/browser/plugin_service_browsertest.cc',
|
||||||
],
|
],
|
||||||
'conditions': [
|
'conditions': [
|
||||||
['chromeos==0', {
|
['chromeos==0', {
|
||||||
|
@ -13,6 +13,7 @@ include_rules = [
|
|||||||
"+net",
|
"+net",
|
||||||
"+ppapi",
|
"+ppapi",
|
||||||
"+printing",
|
"+printing",
|
||||||
|
"+sandbox",
|
||||||
"+skia",
|
"+skia",
|
||||||
|
|
||||||
# Don't allow inclusion of these other libs we shouldn't be calling directly.
|
# Don't allow inclusion of these other libs we shouldn't be calling directly.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// 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/json/json_reader.h"
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
227
content/browser/gpu_blacklist.h
Normal file
227
content/browser/gpu_blacklist.h
Normal file
@ -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_
|
@ -5,8 +5,8 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "base/version.h"
|
#include "base/version.h"
|
||||||
#include "chrome/browser/gpu_blacklist.h"
|
|
||||||
#include "chrome/common/gpu_info.h"
|
#include "chrome/common/gpu_info.h"
|
||||||
|
#include "content/browser/gpu_blacklist.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
|
||||||
TEST(GpuBlacklistTest, BlacklistLogic) {
|
TEST(GpuBlacklistTest, BlacklistLogic) {
|
@ -2,17 +2,14 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// 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 "app/app_switches.h"
|
||||||
#include "base/metrics/histogram.h"
|
#include "base/metrics/histogram.h"
|
||||||
#include "base/ref_counted.h"
|
#include "base/ref_counted.h"
|
||||||
#include "base/string_piece.h"
|
#include "base/string_piece.h"
|
||||||
#include "base/threading/thread.h"
|
#include "base/threading/thread.h"
|
||||||
#include "chrome/browser/browser_thread.h"
|
|
||||||
#include "chrome/browser/gpu_process_host_ui_shim.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/browser/tab_contents/render_view_host_delegate_helper.h"
|
||||||
#include "chrome/common/chrome_switches.h"
|
#include "chrome/common/chrome_switches.h"
|
||||||
#include "chrome/common/gpu_feature_flags.h"
|
#include "chrome/common/gpu_feature_flags.h"
|
||||||
@ -20,6 +17,9 @@
|
|||||||
#include "chrome/common/gpu_messages.h"
|
#include "chrome/common/gpu_messages.h"
|
||||||
#include "chrome/common/render_messages.h"
|
#include "chrome/common/render_messages.h"
|
||||||
#include "chrome/gpu/gpu_thread.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_channel_handle.h"
|
||||||
#include "ipc/ipc_switches.h"
|
#include "ipc/ipc_switches.h"
|
||||||
#include "media/base/media_switches.h"
|
#include "media/base/media_switches.h"
|
54
content/browser/gpu_process_host.h
Normal file
54
content/browser/gpu_process_host.h
Normal file
@ -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_
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
#include "chrome/browser/host_zoom_map.h"
|
#include "content/browser/host_zoom_map.h"
|
||||||
|
|
||||||
#include "base/string_piece.h"
|
#include "base/string_piece.h"
|
||||||
#include "base/utf_string_conversions.h"
|
#include "base/utf_string_conversions.h"
|
||||||
@ -12,13 +12,13 @@
|
|||||||
#include "chrome/browser/prefs/pref_service.h"
|
#include "chrome/browser/prefs/pref_service.h"
|
||||||
#include "chrome/browser/prefs/scoped_pref_update.h"
|
#include "chrome/browser/prefs/scoped_pref_update.h"
|
||||||
#include "chrome/browser/profiles/profile.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_details.h"
|
||||||
#include "chrome/common/notification_service.h"
|
#include "chrome/common/notification_service.h"
|
||||||
#include "chrome/common/notification_source.h"
|
#include "chrome/common/notification_source.h"
|
||||||
#include "chrome/common/notification_type.h"
|
#include "chrome/common/notification_type.h"
|
||||||
#include "chrome/common/pref_names.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 "googleurl/src/gurl.h"
|
||||||
#include "net/base/net_util.h"
|
#include "net/base/net_util.h"
|
||||||
#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
|
#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
|
127
content/browser/host_zoom_map.h
Normal file
127
content/browser/host_zoom_map.h
Normal file
@ -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_
|
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// 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 "chrome/common/mime_registry_messages.h"
|
||||||
#include "net/base/mime_util.h"
|
#include "net/base/mime_util.h"
|
31
content/browser/mime_registry_message_filter.h
Normal file
31
content/browser/mime_registry_message_filter.h
Normal file
@ -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_
|
@ -2,14 +2,14 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "chrome/browser/modal_html_dialog_delegate.h"
|
#include "content/browser/modal_html_dialog_delegate.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "chrome/browser/browser_list.h"
|
#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 "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"
|
#include "ui/gfx/size.h"
|
||||||
|
|
||||||
ModalHtmlDialogDelegate::ModalHtmlDialogDelegate(
|
ModalHtmlDialogDelegate::ModalHtmlDialogDelegate(
|
68
content/browser/modal_html_dialog_delegate.h
Normal file
68
content/browser/modal_html_dialog_delegate.h
Normal file
@ -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_
|
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "chrome/browser/plugin_process_host.h"
|
#include "content/browser/plugin_process_host.h"
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -20,15 +20,11 @@
|
|||||||
#include "base/path_service.h"
|
#include "base/path_service.h"
|
||||||
#include "base/string_util.h"
|
#include "base/string_util.h"
|
||||||
#include "base/utf_string_conversions.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/chrome_plugin_browsing_context.h"
|
||||||
#include "chrome/browser/net/url_request_tracking.h"
|
#include "chrome/browser/net/url_request_tracking.h"
|
||||||
#include "chrome/browser/plugin_download_helper.h"
|
#include "chrome/browser/plugin_download_helper.h"
|
||||||
#include "chrome/browser/plugin_service.h"
|
#include "chrome/browser/plugin_service.h"
|
||||||
#include "chrome/browser/profiles/profile.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_paths.h"
|
||||||
#include "chrome/common/chrome_plugin_lib.h"
|
#include "chrome/common/chrome_plugin_lib.h"
|
||||||
#include "chrome/common/chrome_switches.h"
|
#include "chrome/common/chrome_switches.h"
|
||||||
@ -37,6 +33,10 @@
|
|||||||
#include "chrome/common/plugin_messages.h"
|
#include "chrome/common/plugin_messages.h"
|
||||||
#include "chrome/common/render_messages.h"
|
#include "chrome/common/render_messages.h"
|
||||||
#include "chrome/common/render_messages_params.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 "ipc/ipc_switches.h"
|
||||||
#include "net/base/cookie_store.h"
|
#include "net/base/cookie_store.h"
|
||||||
#include "net/base/io_buffer.h"
|
#include "net/base/io_buffer.h"
|
177
content/browser/plugin_process_host.h
Normal file
177
content/browser/plugin_process_host.h
Normal file
@ -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_
|
@ -10,9 +10,9 @@
|
|||||||
|
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
#include "base/mac/mac_util.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 "chrome/common/plugin_messages.h"
|
||||||
|
#include "content/browser/browser_thread.h"
|
||||||
|
#include "content/browser/plugin_process_host.h"
|
||||||
#include "ui/gfx/rect.h"
|
#include "ui/gfx/rect.h"
|
||||||
|
|
||||||
void PluginProcessHost::OnPluginSelectWindow(uint32 window_id,
|
void PluginProcessHost::OnPluginSelectWindow(uint32 window_id,
|
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "chrome/browser/plugin_service.h"
|
#include "content/browser/plugin_service.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -14,14 +14,11 @@
|
|||||||
#include "base/values.h"
|
#include "base/values.h"
|
||||||
#include "base/synchronization/waitable_event.h"
|
#include "base/synchronization/waitable_event.h"
|
||||||
#include "chrome/browser/browser_process.h"
|
#include "chrome/browser/browser_process.h"
|
||||||
#include "chrome/browser/browser_thread.h"
|
|
||||||
#include "chrome/browser/chrome_plugin_host.h"
|
#include "chrome/browser/chrome_plugin_host.h"
|
||||||
#include "chrome/browser/extensions/extension_service.h"
|
#include "chrome/browser/extensions/extension_service.h"
|
||||||
#include "chrome/browser/plugin_updater.h"
|
#include "chrome/browser/plugin_updater.h"
|
||||||
#include "chrome/browser/ppapi_plugin_process_host.h"
|
#include "chrome/browser/ppapi_plugin_process_host.h"
|
||||||
#include "chrome/browser/profiles/profile.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_plugin_lib.h"
|
||||||
#include "chrome/common/chrome_paths.h"
|
#include "chrome/common/chrome_paths.h"
|
||||||
#include "chrome/common/chrome_switches.h"
|
#include "chrome/common/chrome_switches.h"
|
||||||
@ -34,6 +31,9 @@
|
|||||||
#include "chrome/common/pepper_plugin_registry.h"
|
#include "chrome/common/pepper_plugin_registry.h"
|
||||||
#include "chrome/common/plugin_messages.h"
|
#include "chrome/common/plugin_messages.h"
|
||||||
#include "chrome/common/render_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_constants_win.h"
|
||||||
#include "webkit/plugins/npapi/plugin_list.h"
|
#include "webkit/plugins/npapi/plugin_list.h"
|
||||||
#include "webkit/plugins/npapi/webplugininfo.h"
|
#include "webkit/plugins/npapi/webplugininfo.h"
|
232
content/browser/plugin_service.h
Normal file
232
content/browser/plugin_service.h
Normal file
@ -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_
|
@ -2,13 +2,13 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "chrome/browser/plugin_service.h"
|
#include "content/browser/plugin_service.h"
|
||||||
|
|
||||||
#include "base/auto_reset.h"
|
#include "base/auto_reset.h"
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
#include "chrome/browser/browser_thread.h"
|
|
||||||
#include "chrome/test/in_process_browser_test.h"
|
#include "chrome/test/in_process_browser_test.h"
|
||||||
#include "chrome/test/testing_profile.h"
|
#include "chrome/test/testing_profile.h"
|
||||||
|
#include "content/browser/browser_thread.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
#include "testing/gmock/include/gmock/gmock.h"
|
#include "testing/gmock/include/gmock/gmock.h"
|
||||||
#include "webkit/plugins/npapi/plugin_list.h"
|
#include "webkit/plugins/npapi/plugin_list.h"
|
@ -2,12 +2,12 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "chrome/browser/plugin_service.h"
|
#include "content/browser/plugin_service.h"
|
||||||
|
|
||||||
#include "base/auto_reset.h"
|
#include "base/auto_reset.h"
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
#include "chrome/browser/browser_thread.h"
|
|
||||||
#include "chrome/test/testing_profile.h"
|
#include "chrome/test/testing_profile.h"
|
||||||
|
#include "content/browser/browser_thread.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
@ -2,15 +2,15 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// 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/command_line.h"
|
||||||
#include "base/file_path.h"
|
#include "base/file_path.h"
|
||||||
#include "base/process_util.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/chrome_switches.h"
|
||||||
#include "chrome/common/render_messages.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 "ipc/ipc_switches.h"
|
||||||
#include "ppapi/proxy/ppapi_messages.h"
|
#include "ppapi/proxy/ppapi_messages.h"
|
||||||
|
|
78
content/browser/ppapi_plugin_process_host.h
Normal file
78
content/browser/ppapi_plugin_process_host.h
Normal file
@ -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_
|
||||||
|
|
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// 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/socket.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@ -21,12 +21,12 @@
|
|||||||
#include "base/string_util.h"
|
#include "base/string_util.h"
|
||||||
#include "base/scoped_ptr.h"
|
#include "base/scoped_ptr.h"
|
||||||
#include "base/utf_string_conversions.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_constants.h"
|
||||||
#include "chrome/common/chrome_switches.h"
|
#include "chrome/common/chrome_switches.h"
|
||||||
#include "chrome/common/process_watcher.h"
|
#include "chrome/common/process_watcher.h"
|
||||||
#include "chrome/common/result_codes.h"
|
#include "chrome/common/result_codes.h"
|
||||||
#include "chrome/common/unix_domain_socket_posix.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"
|
#include "sandbox/linux/suid/suid_unsafe_environment_variables.h"
|
||||||
|
|
||||||
static void SaveSUIDUnsafeEnvironmentVariables() {
|
static void SaveSUIDUnsafeEnvironmentVariables() {
|
98
content/browser/zygote_host_linux.h
Normal file
98
content/browser/zygote_host_linux.h
Normal file
@ -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_
|
@ -19,6 +19,8 @@
|
|||||||
#include <selinux/context.h>
|
#include <selinux/context.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "content/browser/zygote_host_linux.h"
|
||||||
|
|
||||||
#include "base/basictypes.h"
|
#include "base/basictypes.h"
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
#include "base/eintr_wrapper.h"
|
#include "base/eintr_wrapper.h"
|
||||||
@ -33,7 +35,6 @@
|
|||||||
#include "base/scoped_ptr.h"
|
#include "base/scoped_ptr.h"
|
||||||
#include "base/sys_info.h"
|
#include "base/sys_info.h"
|
||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
#include "chrome/browser/zygote_host_linux.h"
|
|
||||||
#include "chrome/common/chrome_descriptors.h"
|
#include "chrome/common/chrome_descriptors.h"
|
||||||
#include "chrome/common/chrome_switches.h"
|
#include "chrome/common/chrome_switches.h"
|
||||||
#include "chrome/common/font_config_ipc_linux.h"
|
#include "chrome/common/font_config_ipc_linux.h"
|
@ -46,6 +46,23 @@
|
|||||||
'browser/cross_site_request_manager.h',
|
'browser/cross_site_request_manager.h',
|
||||||
'browser/disposition_utils.cc',
|
'browser/disposition_utils.cc',
|
||||||
'browser/disposition_utils.h',
|
'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.cc',
|
||||||
'browser/renderer_host/accelerated_surface_container_mac.h',
|
'browser/renderer_host/accelerated_surface_container_mac.h',
|
||||||
'browser/renderer_host/accelerated_surface_container_manager_mac.cc',
|
'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_observer.h',
|
||||||
'browser/tab_contents/tab_contents_view.cc',
|
'browser/tab_contents/tab_contents_view.cc',
|
||||||
'browser/tab_contents/tab_contents_view.h',
|
'browser/tab_contents/tab_contents_view.h',
|
||||||
|
'browser/zygote_host_linux.cc',
|
||||||
|
'browser/zygote_host_linux.h',
|
||||||
|
'browser/zygote_main_linux.cc',
|
||||||
],
|
],
|
||||||
'conditions': [
|
'conditions': [
|
||||||
['OS=="win"', {
|
['OS=="win"', {
|
||||||
@ -177,6 +197,14 @@
|
|||||||
'browser/certificate_manager_model.h',
|
'browser/certificate_manager_model.h',
|
||||||
],
|
],
|
||||||
}],
|
}],
|
||||||
|
['OS=="mac"', {
|
||||||
|
'link_settings': {
|
||||||
|
'mac_bundle_resources': [
|
||||||
|
'browser/gpu.sb',
|
||||||
|
'browser/worker.sb',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}],
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
Reference in New Issue
Block a user