Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(258)

Side by Side Diff: content/browser/plugin_service_impl.cc

Issue 128773002: Restart plugin loading only if the plugin list has actually become stale. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: x Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/plugin_service_impl.h" 5 #include "content/browser/plugin_service_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 VLOG(1) << "Watched path changed: " << path.value(); 108 VLOG(1) << "Watched path changed: " << path.value();
109 // Make the plugin list update itself 109 // Make the plugin list update itself
110 PluginList::Singleton()->RefreshPlugins(); 110 PluginList::Singleton()->RefreshPlugins();
111 BrowserThread::PostTask( 111 BrowserThread::PostTask(
112 BrowserThread::UI, FROM_HERE, 112 BrowserThread::UI, FROM_HERE,
113 base::Bind(&PluginService::PurgePluginListCache, 113 base::Bind(&PluginService::PurgePluginListCache,
114 static_cast<BrowserContext*>(NULL), false)); 114 static_cast<BrowserContext*>(NULL), false));
115 } 115 }
116 #endif 116 #endif
117 117
118 void ForwardCallback(base::MessageLoopProxy* target_loop,
119 const PluginService::GetPluginsCallback& callback,
120 const std::vector<WebPluginInfo>& plugins) {
121 target_loop->PostTask(FROM_HERE, base::Bind(callback, plugins));
122 }
123
118 } // namespace 124 } // namespace
119 125
120 // static 126 // static
121 PluginService* PluginService::GetInstance() { 127 PluginService* PluginService::GetInstance() {
122 return PluginServiceImpl::GetInstance(); 128 return PluginServiceImpl::GetInstance();
123 } 129 }
124 130
125 void PluginService::PurgePluginListCache(BrowserContext* browser_context, 131 void PluginService::PurgePluginListCache(BrowserContext* browser_context,
126 bool reload_pages) { 132 bool reload_pages) {
127 for (RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator(); 133 for (RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator();
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 PostSequencedWorkerTaskWithShutdownBehavior( 596 PostSequencedWorkerTaskWithShutdownBehavior(
591 plugin_list_token_, 597 plugin_list_token_,
592 FROM_HERE, 598 FROM_HERE,
593 base::Bind(&PluginServiceImpl::GetPluginsInternal, 599 base::Bind(&PluginServiceImpl::GetPluginsInternal,
594 base::Unretained(this), 600 base::Unretained(this),
595 target_loop, callback), 601 target_loop, callback),
596 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); 602 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
597 return; 603 return;
598 } 604 }
599 #if defined(OS_POSIX) 605 #if defined(OS_POSIX)
600 std::vector<WebPluginInfo> cached_plugins; 606 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
601 if (PluginList::Singleton()->GetPluginsNoRefresh(&cached_plugins)) { 607 base::Bind(&PluginServiceImpl::GetPluginsOnIOThread,
602 // Can't assume the caller is reentrant. 608 base::Unretained(this), target_loop, callback));
603 target_loop->PostTask(FROM_HERE,
604 base::Bind(callback, cached_plugins));
605 } else {
606 // If we switch back to loading plugins in process, then we need to make
607 // sure g_thread_init() gets called since plugins may call glib at load.
608 if (!plugin_loader_.get())
609 plugin_loader_ = new PluginLoaderPosix;
610 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
611 base::Bind(&PluginLoaderPosix::LoadPlugins, plugin_loader_,
612 target_loop, callback));
613 }
614 #else 609 #else
615 NOTREACHED(); 610 NOTREACHED();
616 #endif 611 #endif
617 } 612 }
618 613
619 void PluginServiceImpl::GetPluginsInternal( 614 void PluginServiceImpl::GetPluginsInternal(
620 base::MessageLoopProxy* target_loop, 615 base::MessageLoopProxy* target_loop,
621 const PluginService::GetPluginsCallback& callback) { 616 const PluginService::GetPluginsCallback& callback) {
622 DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread( 617 DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread(
623 plugin_list_token_)); 618 plugin_list_token_));
624 619
625 std::vector<WebPluginInfo> plugins; 620 std::vector<WebPluginInfo> plugins;
626 PluginList::Singleton()->GetPlugins(&plugins, NPAPIPluginsSupported()); 621 PluginList::Singleton()->GetPlugins(&plugins, NPAPIPluginsSupported());
627 622
628 target_loop->PostTask(FROM_HERE, 623 target_loop->PostTask(FROM_HERE,
629 base::Bind(callback, plugins)); 624 base::Bind(callback, plugins));
630 } 625 }
631 626
627 #if defined(OS_POSIX)
628 void PluginServiceImpl::GetPluginsOnIOThread(
629 base::MessageLoopProxy* target_loop,
630 const GetPluginsCallback& callback) {
631 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
632
633 // If we switch back to loading plugins in process, then we need to make
634 // sure g_thread_init() gets called since plugins may call glib at load.
635
636 if (!plugin_loader_)
637 plugin_loader_ = new PluginLoaderPosix;
638
639 plugin_loader_->GetPlugins(
640 base::Bind(&ForwardCallback, make_scoped_refptr(target_loop), callback));
641 }
642 #endif
643
632 void PluginServiceImpl::OnWaitableEventSignaled( 644 void PluginServiceImpl::OnWaitableEventSignaled(
633 base::WaitableEvent* waitable_event) { 645 base::WaitableEvent* waitable_event) {
634 #if defined(OS_WIN) 646 #if defined(OS_WIN)
635 if (waitable_event == hkcu_event_) { 647 if (waitable_event == hkcu_event_) {
636 hkcu_key_.StartWatching(); 648 hkcu_key_.StartWatching();
637 } else { 649 } else {
638 hklm_key_.StartWatching(); 650 hklm_key_.StartWatching();
639 } 651 }
640 652
641 PluginList::Singleton()->RefreshPlugins(); 653 PluginList::Singleton()->RefreshPlugins();
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 return gfx::GetClassName(window) == base::string16(kNativeWindowClassName); 852 return gfx::GetClassName(window) == base::string16(kNativeWindowClassName);
841 } 853 }
842 #endif 854 #endif
843 855
844 bool PluginServiceImpl::PpapiDevChannelSupported() { 856 bool PluginServiceImpl::PpapiDevChannelSupported() {
845 return content::GetContentClient()->browser()-> 857 return content::GetContentClient()->browser()->
846 IsPluginAllowedToUseDevChannelAPIs(); 858 IsPluginAllowedToUseDevChannelAPIs();
847 } 859 }
848 860
849 } // namespace content 861 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698