| Index: chrome/browser/ui/webui/flash_ui.cc
|
| diff --git a/chrome/browser/ui/webui/flash_ui.cc b/chrome/browser/ui/webui/flash_ui.cc
|
| index 0dd10768d9241473e3ce4d3ed15d8d6f31ed763a..074a687f32d3d812e6e7a4a440fb0c1463ab430a 100644
|
| --- a/chrome/browser/ui/webui/flash_ui.cc
|
| +++ b/chrome/browser/ui/webui/flash_ui.cc
|
| @@ -12,6 +12,7 @@
|
| #include "base/bind_helpers.h"
|
| #include "base/callback_old.h"
|
| #include "base/i18n/time_formatting.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "base/string_number_conversions.h"
|
| #include "base/stringprintf.h"
|
| #include "base/threading/thread_restrictions.h"
|
| @@ -26,6 +27,7 @@
|
| #include "chrome/common/chrome_version_info.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "content/browser/gpu/gpu_data_manager.h"
|
| +#include "content/browser/plugin_service.h"
|
| #include "content/browser/tab_contents/tab_contents.h"
|
| #include "content/browser/user_metrics.h"
|
| #include "grit/browser_resources.h"
|
| @@ -34,7 +36,6 @@
|
| #include "grit/theme_resources.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| -#include "webkit/plugins/npapi/plugin_list.h"
|
| #include "webkit/plugins/webplugininfo.h"
|
|
|
| #if defined(OS_WIN)
|
| @@ -82,6 +83,9 @@ class FlashDOMHandler : public WebUIMessageHandler,
|
| // Callback for the GPU information update.
|
| void OnGpuInfoUpdate();
|
|
|
| + // Callback for the Flash plugin information.
|
| + void OnGotPlugins(const std::vector<webkit::WebPluginInfo>& plugins);
|
| +
|
| private:
|
| // Called when we think we might have enough information to return data back
|
| // to the page.
|
| @@ -104,20 +108,27 @@ class FlashDOMHandler : public WebUIMessageHandler,
|
| // Crash list.
|
| scoped_refptr<CrashUploadList> upload_list_;
|
|
|
| + // Factory for the creating refs in callbacks.
|
| + base::WeakPtrFactory<FlashDOMHandler> weak_ptr_factory_;
|
| +
|
| // Whether the list of all crashes is available.
|
| bool crash_list_available_;
|
| // Whether the page has requested data.
|
| bool page_has_requested_data_;
|
| // Whether the GPU data has been collected.
|
| bool has_gpu_info_;
|
| + // Whether the plugin information is ready.
|
| + bool has_plugin_info_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(FlashDOMHandler);
|
| };
|
|
|
| FlashDOMHandler::FlashDOMHandler()
|
| - : crash_list_available_(false),
|
| + : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
|
| + crash_list_available_(false),
|
| page_has_requested_data_(false),
|
| - has_gpu_info_(false) {
|
| + has_gpu_info_(false),
|
| + has_plugin_info_(false) {
|
| // Request Crash data asynchronously.
|
| upload_list_ = CrashUploadList::Create(this);
|
| upload_list_->LoadCrashListAsynchronously();
|
| @@ -137,6 +148,9 @@ FlashDOMHandler::FlashDOMHandler()
|
| if (!gpu_data_manager_->GpuAccessAllowed())
|
| OnGpuInfoUpdate();
|
|
|
| + PluginService::GetInstance()->GetPlugins(base::Bind(
|
| + &FlashDOMHandler::OnGotPlugins, weak_ptr_factory_.GetWeakPtr()));
|
| +
|
| // And lastly, we fire off a timer to make sure we never get stuck at the
|
| // "Loading..." message.
|
| timeout_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(kTimeout),
|
| @@ -175,11 +189,18 @@ void FlashDOMHandler::OnGpuInfoUpdate() {
|
| MaybeRespondToPage();
|
| }
|
|
|
| +void FlashDOMHandler::OnGotPlugins(
|
| + const std::vector<webkit::WebPluginInfo>& plugins) {
|
| + has_plugin_info_ = true;
|
| + MaybeRespondToPage();
|
| +}
|
| +
|
| void FlashDOMHandler::OnTimeout() {
|
| // We don't set page_has_requested_data_ because that is guaranteed to appear
|
| // and we shouldn't be responding to the page before then.
|
| has_gpu_info_ = true;
|
| crash_list_available_ = true;
|
| + has_plugin_info_ = true;
|
| MaybeRespondToPage();
|
| }
|
|
|
| @@ -187,8 +208,10 @@ void FlashDOMHandler::MaybeRespondToPage() {
|
| // We don't reply until everything is ready. The page is showing a 'loading'
|
| // message until then. If you add criteria to this list, please update the
|
| // function OnTimeout() as well.
|
| - if (!page_has_requested_data_ || !crash_list_available_ || !has_gpu_info_)
|
| + if (!page_has_requested_data_ || !crash_list_available_ || !has_gpu_info_ ||
|
| + !has_plugin_info_) {
|
| return;
|
| + }
|
|
|
| timeout_.Stop();
|
|
|
| @@ -232,8 +255,8 @@ void FlashDOMHandler::MaybeRespondToPage() {
|
|
|
| // Obtain the version of the Flash plugins.
|
| std::vector<webkit::WebPluginInfo> info_array;
|
| - webkit::npapi::PluginList::Singleton()->GetPluginInfoArray(
|
| - GURL(), "application/x-shockwave-flash", false, NULL, &info_array, NULL);
|
| + PluginService::GetInstance()->GetPluginInfoArray(
|
| + GURL(), "application/x-shockwave-flash", false, &info_array, NULL);
|
| string16 flash_version;
|
| if (info_array.empty()) {
|
| AddPair(list, ASCIIToUTF16("Flash plugin"), "Disabled");
|
|
|