diff options
author | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-16 21:36:44 +0000 |
---|---|---|
committer | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-16 21:36:44 +0000 |
commit | c84a78578ea53490282bfb128fd844b120f926b5 (patch) | |
tree | 5bd1d8218ecf5d7863b33b3873a100386f61a96e | |
parent | ca11e335df5305cdb46cfa8f27091cf9d70fb5b6 (diff) | |
download | chromium_src-c84a78578ea53490282bfb128fd844b120f926b5.zip chromium_src-c84a78578ea53490282bfb128fd844b120f926b5.tar.gz chromium_src-c84a78578ea53490282bfb128fd844b120f926b5.tar.bz2 |
Gears File Drag Drop
r24899 now keys the child security policy database based on
renderer id, rather than renderer process id. Update gears
drag drop to use the renderer id for the file policy access
checks.
This is a clone for submission of of noel's original CL
http://codereview.chromium.org/195079
BUG=7995
Review URL: http://codereview.chromium.org/196145
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26397 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/plugin_process_host.cc | 4 | ||||
-rw-r--r-- | chrome/browser/plugin_process_host.h | 2 | ||||
-rw-r--r-- | chrome/common/plugin_messages_internal.h | 4 | ||||
-rw-r--r-- | chrome/plugin/chrome_plugin_host.cc | 6 | ||||
-rw-r--r-- | chrome/plugin/plugin_channel.cc | 19 | ||||
-rw-r--r-- | chrome/plugin/plugin_channel.h | 11 | ||||
-rw-r--r-- | chrome/plugin/plugin_thread.h | 6 | ||||
-rw-r--r-- | chrome/plugin/webplugin_proxy.cc | 6 | ||||
-rw-r--r-- | chrome/plugin/webplugin_proxy.h | 4 |
9 files changed, 36 insertions, 26 deletions
diff --git a/chrome/browser/plugin_process_host.cc b/chrome/browser/plugin_process_host.cc index 0befa1c..1ae4e25 100644 --- a/chrome/browser/plugin_process_host.cc +++ b/chrome/browser/plugin_process_host.cc @@ -537,7 +537,7 @@ void PluginProcessHost::OnGetCookies(uint32 request_context, } } -void PluginProcessHost::OnAccessFiles(int process_id, +void PluginProcessHost::OnAccessFiles(int renderer_id, const std::vector<std::string>& files, bool* allowed) { ChildProcessSecurityPolicy* policy = @@ -545,7 +545,7 @@ void PluginProcessHost::OnAccessFiles(int process_id, for (size_t i = 0; i < files.size(); ++i) { const FilePath path = FilePath::FromWStringHack(UTF8ToWide(files[i])); - if (!policy->CanUploadFile(process_id, path)) { + if (!policy->CanUploadFile(renderer_id, path)) { LOG(INFO) << "Denied unauthorized request for file " << files[i]; *allowed = false; return; diff --git a/chrome/browser/plugin_process_host.h b/chrome/browser/plugin_process_host.h index 66b5098..a223503 100644 --- a/chrome/browser/plugin_process_host.h +++ b/chrome/browser/plugin_process_host.h @@ -97,7 +97,7 @@ class PluginProcessHost : public ChildProcessHost, void OnGetPluginFinderUrl(std::string* plugin_finder_url); void OnGetCookies(uint32 request_context, const GURL& url, std::string* cookies); - void OnAccessFiles(int process_id, const std::vector<std::string>& files, + 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); diff --git a/chrome/common/plugin_messages_internal.h b/chrome/common/plugin_messages_internal.h index 795ee61..3c64bcf 100644 --- a/chrome/common/plugin_messages_internal.h +++ b/chrome/common/plugin_messages_internal.h @@ -74,10 +74,10 @@ IPC_BEGIN_MESSAGES(PluginProcessHost) GURL /* url */, std::string /* cookies */) - // Used by the plugin process to verify that its renderer |process_id| has + // Used by the plugin process to verify that its renderer |renderer_id| has // permission to access the given |files|. IPC_SYNC_MESSAGE_CONTROL2_1(PluginProcessHostMsg_AccessFiles, - int /* process_id */, + int /* renderer_id */, std::vector<std::string> /* files */, bool /* allowed */) diff --git a/chrome/plugin/chrome_plugin_host.cc b/chrome/plugin/chrome_plugin_host.cc index b724ca0..95a4862 100644 --- a/chrome/plugin/chrome_plugin_host.cc +++ b/chrome/plugin/chrome_plugin_host.cc @@ -362,8 +362,8 @@ CPError STDCALL CPB_AllowFileDrop( if (!webplugin || !file_drag_data) return CPERR_INVALID_PARAMETER; - const int pid = webplugin->GetRendererProcessId(); - if (!pid) + const int renderer = webplugin->GetRendererId(); + if (renderer == -1) return CPERR_FAILURE; static const char kDelimiter('\b'); @@ -372,7 +372,7 @@ CPError STDCALL CPB_AllowFileDrop( bool allowed = false; if (!PluginThread::current()->Send( - new PluginProcessHostMsg_AccessFiles(pid, files, &allowed))) { + new PluginProcessHostMsg_AccessFiles(renderer, files, &allowed))) { return CPERR_FAILURE; } diff --git a/chrome/plugin/plugin_channel.cc b/chrome/plugin/plugin_channel.cc index c813e4c..f852a21 100644 --- a/chrome/plugin/plugin_channel.cc +++ b/chrome/plugin/plugin_channel.cc @@ -33,16 +33,23 @@ PluginChannel* PluginChannel::GetPluginChannel(int renderer_id, std::string channel_name = StringPrintf( "%d.r%d", base::GetCurrentProcId(), renderer_id); - return static_cast<PluginChannel*>(PluginChannelBase::GetChannel( - channel_name, - IPC::Channel::MODE_SERVER, - ClassFactory, - ipc_message_loop, - false)); + PluginChannel* channel = + static_cast<PluginChannel*>(PluginChannelBase::GetChannel( + channel_name, + IPC::Channel::MODE_SERVER, + ClassFactory, + ipc_message_loop, + false)); + + if (channel) + channel->renderer_id_ = renderer_id; + + return channel; } PluginChannel::PluginChannel() : renderer_handle_(0), + renderer_id_(-1), #if defined(OS_POSIX) renderer_fd_(-1), #endif diff --git a/chrome/plugin/plugin_channel.h b/chrome/plugin/plugin_channel.h index 58e711f..5e512f3 100644 --- a/chrome/plugin/plugin_channel.h +++ b/chrome/plugin/plugin_channel.h @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// 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. @@ -16,8 +16,8 @@ class PluginChannel : public PluginChannelBase { public: // Get a new PluginChannel object for the current process to talk to the - // given rendeer process. The renderer ID is an opaque unique ID generated by - // the browser. + // given renderer process. The renderer ID is an opaque unique ID generated + // by the browser. // // POSIX only: If |channel_fd| > 0, use that file descriptor for the // channel socket. @@ -30,6 +30,8 @@ class PluginChannel : public PluginChannelBase { virtual void OnMessageReceived(const IPC::Message& message); base::ProcessHandle renderer_handle() const { return renderer_handle_; } + int renderer_id() { return renderer_id_; } + int GenerateRouteID(); #if defined(OS_POSIX) @@ -76,6 +78,9 @@ class PluginChannel : public PluginChannelBase { // Handle to the renderer process who is on the other side of the channel. base::ProcessHandle renderer_handle_; + // The id of the renderer who is on the other side of the channel. + int renderer_id_; + #if defined(OS_POSIX) // FD for the renderer end of the pipe. It is stored until we send it over // IPC after which it is cleared. It will be closed by the IPC mechanism. diff --git a/chrome/plugin/plugin_thread.h b/chrome/plugin/plugin_thread.h index 2e9803c..cc0e7f6 100644 --- a/chrome/plugin/plugin_thread.h +++ b/chrome/plugin/plugin_thread.h @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// 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. @@ -31,9 +31,7 @@ class PluginThread : public ChildThread { virtual void OnControlMessageReceived(const IPC::Message& msg); // Callback for when a channel has been created. - void OnCreateChannel( - int process_id, - bool off_the_record); + void OnCreateChannel(int renderer_id, bool off_the_record); void OnPluginMessage(const std::vector<uint8> &data); // The plugin module which is preloaded in Init diff --git a/chrome/plugin/webplugin_proxy.cc b/chrome/plugin/webplugin_proxy.cc index 721a39e..0eb570a 100644 --- a/chrome/plugin/webplugin_proxy.cc +++ b/chrome/plugin/webplugin_proxy.cc @@ -266,10 +266,10 @@ WebPluginResourceClient* WebPluginProxy::GetResourceClient(int id) { return iterator->second; } -int WebPluginProxy::GetRendererProcessId() { +int WebPluginProxy::GetRendererId() { if (channel_.get()) - return channel_->peer_pid(); - return 0; + return channel_->renderer_id(); + return -1; } void WebPluginProxy::DidPaint() { diff --git a/chrome/plugin/webplugin_proxy.h b/chrome/plugin/webplugin_proxy.h index 62b01ef..0ff1890 100644 --- a/chrome/plugin/webplugin_proxy.h +++ b/chrome/plugin/webplugin_proxy.h @@ -87,8 +87,8 @@ class WebPluginProxy : public webkit_glue::WebPlugin { // object with that id exists. webkit_glue::WebPluginResourceClient* GetResourceClient(int id); - // Returns the process id of the renderer that contains this plugin. - int GetRendererProcessId(); + // Returns the id of the renderer that contains this plugin. + int GetRendererId(); // For windowless plugins, paints the given rectangle into the local buffer. void Paint(const gfx::Rect& rect); |