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

Side by Side Diff: third_party/WebKit/Source/platform/plugins/PluginData.cpp

Issue 2156803002: [HBD] Remove PluginCache and reload plugin list when origin changes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Set m_refresh to false after plugin list is retrieved Created 4 years, 5 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
« no previous file with comments | « third_party/WebKit/Source/platform/plugins/PluginData.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 Copyright (C) 2000 Harri Porten (porten@kde.org) 2 Copyright (C) 2000 Harri Porten (porten@kde.org)
3 Copyright (C) 2000 Daniel Molkentin (molkentin@kde.org) 3 Copyright (C) 2000 Daniel Molkentin (molkentin@kde.org)
4 Copyright (C) 2000 Stefan Schimanski (schimmi@kde.org) 4 Copyright (C) 2000 Stefan Schimanski (schimmi@kde.org)
5 Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All Rights Reserved. 5 Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All Rights Reserved.
6 Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 6 Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
11 version 2 of the License, or (at your option) any later version. 11 version 2 of the License, or (at your option) any later version.
12 12
13 This library is distributed in the hope that it will be useful, 13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details. 16 Library General Public License for more details.
17 17
18 You should have received a copy of the GNU Library General Public License 18 You should have received a copy of the GNU Library General Public License
19 along with this library; see the file COPYING.LIB. If not, write to 19 along with this library; see the file COPYING.LIB. If not, write to
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. 21 Boston, MA 02110-1301, USA.
22 */ 22 */
23 23
24 #include "platform/plugins/PluginData.h" 24 #include "platform/plugins/PluginData.h"
25 25
26 #include "platform/plugins/PluginListBuilder.h" 26 #include "platform/plugins/PluginListBuilder.h"
27 #include "public/platform/Platform.h" 27 #include "public/platform/Platform.h"
28 28
29 namespace blink { 29 namespace blink {
30
31 class PluginCache {
32 public:
33 PluginCache() : m_loaded(false), m_refresh(false) { }
34 ~PluginCache() { reset(false); }
35
36 void reset(bool refresh)
37 {
38 m_plugins.clear();
39 m_loaded = false;
40 m_refresh = refresh;
41 }
42
43 const Vector<PluginInfo>& plugins()
44 {
45 if (!m_loaded) {
46 PluginListBuilder builder(&m_plugins);
47 Platform::current()->getPluginList(m_refresh, &builder);
48 m_loaded = true;
49 m_refresh = false;
50 }
51 return m_plugins;
52 }
53
54 private:
55 Vector<PluginInfo> m_plugins;
56 bool m_loaded;
57 bool m_refresh;
58 };
59
60 static PluginCache& pluginCache()
61 {
62 DEFINE_STATIC_LOCAL(PluginCache, cache, ());
63 return cache;
64 }
65
66 PluginData::PluginData(const Page* page) 30 PluginData::PluginData(const Page* page)
67 { 31 {
68 initPlugins(page); 32 initPlugins(page);
69 33
70 for (unsigned i = 0; i < m_plugins.size(); ++i) { 34 for (unsigned i = 0; i < m_plugins.size(); ++i) {
71 const PluginInfo& plugin = m_plugins[i]; 35 const PluginInfo& plugin = m_plugins[i];
72 for (unsigned j = 0; j < plugin.mimes.size(); ++j) { 36 for (unsigned j = 0; j < plugin.mimes.size(); ++j) {
73 m_mimes.append(plugin.mimes[j]); 37 m_mimes.append(plugin.mimes[j]);
74 m_mimePluginIndices.append(i); 38 m_mimePluginIndices.append(i);
75 } 39 }
(...skipping 22 matching lines...) Expand all
98 62
99 String PluginData::pluginNameForMimeType(const String& mimeType) const 63 String PluginData::pluginNameForMimeType(const String& mimeType) const
100 { 64 {
101 if (const PluginInfo* info = pluginInfoForMimeType(mimeType)) 65 if (const PluginInfo* info = pluginInfoForMimeType(mimeType))
102 return info->name; 66 return info->name;
103 return String(); 67 return String();
104 } 68 }
105 69
106 void PluginData::initPlugins(const Page*) 70 void PluginData::initPlugins(const Page*)
107 { 71 {
108 const Vector<PluginInfo>& plugins = pluginCache().plugins(); 72 PluginListBuilder builder(&m_plugins);
109 for (size_t i = 0; i < plugins.size(); ++i) 73 Platform::current()->getPluginList(m_refresh, &builder);
110 m_plugins.append(plugins[i]); 74 m_refresh = false;
111 } 75 }
112 76
113 void PluginData::refresh() 77 void PluginData::refresh()
114 { 78 {
115 pluginCache().reset(true); 79 m_refresh = true;
116 pluginCache().plugins(); // Force the plugins to be reloaded now.
117 } 80 }
118 81
119 String getPluginMimeTypeFromExtension(const String& extension) 82 String getPluginMimeTypeFromExtension(const String& extension)
120 { 83 {
121 const Vector<PluginInfo>& plugins = pluginCache().plugins(); 84 Vector<PluginInfo> plugins;
tommycli 2016/07/18 19:29:04 I think we can do something like: if (m_refresh)
trizzofo 2016/07/29 22:19:09 Unfortunately we can't do that because getPluginMi
85 PluginListBuilder builder(&plugins);
86 Platform::current()->getPluginList(PluginData::m_refresh, &builder);
87 PluginData::m_refresh = false;
122 for (size_t i = 0; i < plugins.size(); ++i) { 88 for (size_t i = 0; i < plugins.size(); ++i) {
123 for (size_t j = 0; j < plugins[i].mimes.size(); ++j) { 89 for (size_t j = 0; j < plugins[i].mimes.size(); ++j) {
124 const MimeClassInfo& mime = plugins[i].mimes[j]; 90 const MimeClassInfo& mime = plugins[i].mimes[j];
125 const Vector<String>& extensions = mime.extensions; 91 const Vector<String>& extensions = mime.extensions;
126 for (size_t k = 0; k < extensions.size(); ++k) { 92 for (size_t k = 0; k < extensions.size(); ++k) {
127 if (extension == extensions[k]) 93 if (extension == extensions[k])
128 return mime.type; 94 return mime.type;
129 } 95 }
130 } 96 }
131 } 97 }
132 return String(); 98 return String();
133 } 99 }
134 100
101 bool PluginData::m_refresh = false;
102
135 } // namespace blink 103 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/plugins/PluginData.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698