| Index: chrome/renderer/render_view.cc
|
| ===================================================================
|
| --- chrome/renderer/render_view.cc (revision 25087)
|
| +++ chrome/renderer/render_view.cc (working copy)
|
| @@ -88,6 +88,7 @@
|
| #include "webkit/glue/webkit_glue.h"
|
| #include "webkit/glue/webmediaplayer_impl.h"
|
| #include "webkit/glue/webplugin_delegate.h"
|
| +#include "webkit/glue/webplugin_impl.h"
|
| #include "webkit/glue/webview.h"
|
|
|
| #if defined(OS_WIN)
|
| @@ -191,7 +192,6 @@
|
| last_indexed_page_id_(-1),
|
| opened_by_user_gesture_(true),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)),
|
| - first_default_plugin_(NULL),
|
| devtools_agent_(NULL),
|
| devtools_client_(NULL),
|
| history_back_list_count_(0),
|
| @@ -216,13 +216,6 @@
|
| if (decrement_shared_popup_at_destruction_)
|
| shared_popup_counter_->data--;
|
|
|
| - // Clear any back-pointers that might still be held by plugins.
|
| - PluginDelegateList::iterator it = plugin_delegates_.begin();
|
| - while (it != plugin_delegates_.end()) {
|
| - (*it)->DropRenderView();
|
| - it = plugin_delegates_.erase(it);
|
| - }
|
| -
|
| render_thread_->RemoveFilter(audio_message_filter_);
|
| }
|
|
|
| @@ -256,25 +249,11 @@
|
| next_page_id_ = next_page_id;
|
| }
|
|
|
| -void RenderView::PluginDestroyed(WebPluginDelegateProxy* proxy) {
|
| - PluginDelegateList::iterator it =
|
| - std::find(plugin_delegates_.begin(), plugin_delegates_.end(), proxy);
|
| - DCHECK(it != plugin_delegates_.end());
|
| - plugin_delegates_.erase(it);
|
| - // If the plugin is deleted, we need to clear our reference in case user
|
| - // clicks the info bar to install. Unfortunately we are getting
|
| - // PluginDestroyed in single process mode. However, that is not a huge
|
| - // concern.
|
| - if (proxy == first_default_plugin_)
|
| - first_default_plugin_ = NULL;
|
| -}
|
| -
|
| void RenderView::PluginCrashed(base::ProcessId pid,
|
| const FilePath& plugin_path) {
|
| Send(new ViewHostMsg_CrashedPlugin(routing_id_, pid, plugin_path));
|
| }
|
|
|
| -
|
| void RenderView::JSOutOfMemory() {
|
| Send(new ViewHostMsg_JSOutOfMemory(routing_id_));
|
| }
|
| @@ -1070,7 +1049,7 @@
|
| is_loading_ = true;
|
| // Clear the pointer so that we can assign it only when there is an unknown
|
| // plugin on a page.
|
| - first_default_plugin_ = NULL;
|
| + first_default_plugin_.reset();
|
|
|
| Send(new ViewHostMsg_DidStartLoading(routing_id_));
|
| }
|
| @@ -1784,16 +1763,6 @@
|
| popup_notification_visible_ = visible;
|
| }
|
|
|
| -void RenderView::ShowModalHTMLDialog(const GURL& url, int width, int height,
|
| - const std::string& json_arguments,
|
| - std::string* json_retval) {
|
| - IPC::SyncMessage* msg = new ViewHostMsg_ShowModalHTMLDialog(
|
| - routing_id_, url, width, height, json_arguments, json_retval);
|
| -
|
| - msg->set_pump_messages_event(modal_dialog_event_.get());
|
| - Send(msg);
|
| -}
|
| -
|
| uint32 RenderView::GetCPBrowsingContext() {
|
| uint32 context = 0;
|
| Send(new ViewHostMsg_GetCPBrowsingContext(&context));
|
| @@ -1911,51 +1880,9 @@
|
| return widget->webwidget();
|
| }
|
|
|
| -WebPluginDelegate* RenderView::CreatePluginDelegate(
|
| - WebView* webview,
|
| - const GURL& url,
|
| - const std::string& mime_type,
|
| - const std::string& clsid,
|
| - std::string* actual_mime_type) {
|
| - if (!PluginChannelHost::IsListening())
|
| - return NULL;
|
| -
|
| - GURL policy_url;
|
| - if (webview->GetMainFrame())
|
| - policy_url = webview->GetMainFrame()->url();
|
| -
|
| - FilePath path;
|
| - render_thread_->Send(
|
| - new ViewHostMsg_GetPluginPath(url, policy_url, mime_type, clsid, &path,
|
| - actual_mime_type));
|
| - if (path.value().empty())
|
| - return NULL;
|
| -
|
| - std::string mime_type_to_use;
|
| - if (!actual_mime_type->empty())
|
| - mime_type_to_use = *actual_mime_type;
|
| - else
|
| - mime_type_to_use = mime_type;
|
| -
|
| - if (RenderProcess::current()->in_process_plugins()) {
|
| -#if defined(OS_WIN) // In-proc plugins aren't supported on Linux or Mac.
|
| - return WebPluginDelegate::Create(path,
|
| - mime_type_to_use,
|
| - gfx::NativeViewFromId(host_window_));
|
| -#else
|
| - NOTIMPLEMENTED();
|
| - return NULL;
|
| -#endif
|
| - }
|
| -
|
| - WebPluginDelegateProxy* proxy =
|
| - WebPluginDelegateProxy::Create(url, mime_type_to_use, clsid, this);
|
| - if (!proxy)
|
| - return NULL;
|
| -
|
| - plugin_delegates_.push_back(proxy);
|
| -
|
| - return proxy;
|
| +WebKit::WebPlugin* RenderView::CreatePlugin(
|
| + WebFrame* frame, const WebKit::WebPluginParams& params) {
|
| + return new webkit_glue::WebPluginImpl(frame, params, AsWeakPtr());
|
| }
|
|
|
| WebKit::WebMediaPlayer* RenderView::CreateWebMediaPlayer(
|
| @@ -1993,13 +1920,14 @@
|
| return new webkit_glue::WebMediaPlayerImpl(client, factory);
|
| }
|
|
|
| -void RenderView::OnMissingPluginStatus(WebPluginDelegate* delegate,
|
| - int status) {
|
| +void RenderView::OnMissingPluginStatus(
|
| + WebPluginDelegateProxy* delegate,
|
| + int status) {
|
| #if defined(OS_WIN)
|
| - if (first_default_plugin_ == NULL) {
|
| + if (!first_default_plugin_) {
|
| // Show the InfoBar for the first available plugin.
|
| if (status == default_plugin::MISSING_PLUGIN_AVAILABLE) {
|
| - first_default_plugin_ = delegate;
|
| + first_default_plugin_ = delegate->AsWeakPtr();
|
| Send(new ViewHostMsg_MissingPluginStatus(routing_id_, status));
|
| }
|
| } else {
|
| @@ -2087,6 +2015,88 @@
|
| Send(msg);
|
| }
|
|
|
| +webkit_glue::WebPluginDelegate* RenderView::CreatePluginDelegate(
|
| + const GURL& url,
|
| + const std::string& mime_type,
|
| + const std::string& clsid,
|
| + std::string* actual_mime_type) {
|
| + if (!PluginChannelHost::IsListening())
|
| + return NULL;
|
| +
|
| + GURL policy_url;
|
| + WebFrame* main_frame = webview()->GetMainFrame();
|
| + if (main_frame)
|
| + policy_url = main_frame->url();
|
| +
|
| + FilePath path;
|
| + render_thread_->Send(
|
| + new ViewHostMsg_GetPluginPath(url, policy_url, mime_type, clsid, &path,
|
| + actual_mime_type));
|
| + if (path.value().empty())
|
| + return NULL;
|
| +
|
| + const std::string* mime_type_to_use;
|
| + if (!actual_mime_type->empty())
|
| + mime_type_to_use = actual_mime_type;
|
| + else
|
| + mime_type_to_use = &mime_type;
|
| +
|
| + if (RenderProcess::current()->in_process_plugins()) {
|
| +#if defined(OS_WIN) // In-proc plugins aren't supported on Linux or Mac.
|
| + return webkit_glue::WebPluginDelegate::Create(
|
| + path, *mime_type_to_use, gfx::NativeViewFromId(host_window_));
|
| +#else
|
| + NOTIMPLEMENTED();
|
| + return NULL;
|
| +#endif
|
| + }
|
| +
|
| + return WebPluginDelegateProxy::Create(
|
| + url, *mime_type_to_use, clsid, AsWeakPtr());
|
| +}
|
| +
|
| +void RenderView::CreatedPluginWindow(gfx::PluginWindowHandle window) {
|
| +#if defined(OS_LINUX)
|
| + RenderThread::current()->Send(new ViewHostMsg_CreatePluginContainer(
|
| + routing_id(), window));
|
| +#endif
|
| +}
|
| +
|
| +void RenderView::WillDestroyPluginWindow(gfx::PluginWindowHandle window) {
|
| +#if defined(OS_LINUX)
|
| + RenderThread::current()->Send(new ViewHostMsg_DestroyPluginContainer(
|
| + routing_id(), window));
|
| +#endif
|
| + CleanupWindowInPluginMoves(window);
|
| +}
|
| +
|
| +void RenderView::DidMovePlugin(const webkit_glue::WebPluginGeometry& move) {
|
| + SchedulePluginMove(move);
|
| +}
|
| +
|
| +void RenderView::DidStartLoadingForPlugin() {
|
| + // TODO(darin): Make is_loading_ be a counter!
|
| + DidStartLoading(webview());
|
| +}
|
| +
|
| +void RenderView::DidStopLoadingForPlugin() {
|
| + // TODO(darin): Make is_loading_ be a counter!
|
| + DidStopLoading(webview());
|
| +}
|
| +
|
| +void RenderView::ShowModalHTMLDialogForPlugin(
|
| + const GURL& url,
|
| + const gfx::Size& size,
|
| + const std::string& json_arguments,
|
| + std::string* json_retval) {
|
| + IPC::SyncMessage* msg = new ViewHostMsg_ShowModalHTMLDialog(
|
| + routing_id_, url, size.width(), size.height(), json_arguments,
|
| + json_retval);
|
| +
|
| + msg->set_pump_messages_event(modal_dialog_event_.get());
|
| + Send(msg);
|
| +}
|
| +
|
| void RenderView::SyncNavigationState() {
|
| if (!webview())
|
| return;
|
| @@ -2742,9 +2752,8 @@
|
|
|
| void RenderView::OnInstallMissingPlugin() {
|
| // This could happen when the first default plugin is deleted.
|
| - if (first_default_plugin_ == NULL)
|
| - return;
|
| - first_default_plugin_->InstallMissingPlugin();
|
| + if (first_default_plugin_)
|
| + first_default_plugin_->InstallMissingPlugin();
|
| }
|
|
|
| void RenderView::OnFileChooserResponse(
|
| @@ -3297,25 +3306,6 @@
|
| #endif
|
| }
|
|
|
| -void RenderView::DidMovePlugin(const WebPluginGeometry& move) {
|
| - SchedulePluginMove(move);
|
| -}
|
| -
|
| -void RenderView::CreatedPluginWindow(gfx::PluginWindowHandle window) {
|
| -#if defined(OS_LINUX)
|
| - RenderThread::current()->Send(new ViewHostMsg_CreatePluginContainer(
|
| - routing_id(), window));
|
| -#endif
|
| -}
|
| -
|
| -void RenderView::WillDestroyPluginWindow(gfx::PluginWindowHandle window) {
|
| -#if defined(OS_LINUX)
|
| - RenderThread::current()->Send(new ViewHostMsg_DestroyPluginContainer(
|
| - routing_id(), window));
|
| -#endif
|
| - CleanupWindowInPluginMoves(window);
|
| -}
|
| -
|
| void RenderView::SendPasswordForms(WebFrame* frame) {
|
| WebVector<WebForm> forms;
|
| frame->forms(forms);
|
|
|