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

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: Address issues pointed in comments Created 4 years, 4 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
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 #include "public/platform/WebSecurityOrigin.h"
28 29
29 namespace blink { 30 namespace blink {
30 31 PluginData::PluginData(const WebSecurityOrigin* origin)
alexmos 2016/08/02 22:06:28 nit: empty line before this.
trizzofo 2016/08/03 00:08:37 Done.
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 { 32 {
62 DEFINE_STATIC_LOCAL(PluginCache, cache, ()); 33 PluginListBuilder builder(&m_plugins);
63 return cache; 34 Platform::current()->getPluginList(m_refresh, origin, &builder);
64 } 35 m_refresh = false;
65
66 PluginData::PluginData(const Page* page)
67 {
68 initPlugins(page);
69 36
70 for (unsigned i = 0; i < m_plugins.size(); ++i) { 37 for (unsigned i = 0; i < m_plugins.size(); ++i) {
71 const PluginInfo& plugin = m_plugins[i]; 38 const PluginInfo& plugin = m_plugins[i];
72 for (unsigned j = 0; j < plugin.mimes.size(); ++j) { 39 for (unsigned j = 0; j < plugin.mimes.size(); ++j) {
73 m_mimes.append(plugin.mimes[j]); 40 m_mimes.append(plugin.mimes[j]);
74 m_mimePluginIndices.append(i); 41 m_mimePluginIndices.append(i);
75 } 42 }
76 } 43 }
77 } 44 }
78 45
(...skipping 17 matching lines...) Expand all
96 return 0; 63 return 0;
97 } 64 }
98 65
99 String PluginData::pluginNameForMimeType(const String& mimeType) const 66 String PluginData::pluginNameForMimeType(const String& mimeType) const
100 { 67 {
101 if (const PluginInfo* info = pluginInfoForMimeType(mimeType)) 68 if (const PluginInfo* info = pluginInfoForMimeType(mimeType))
102 return info->name; 69 return info->name;
103 return String(); 70 return String();
104 } 71 }
105 72
106 void PluginData::initPlugins(const Page*)
107 {
108 const Vector<PluginInfo>& plugins = pluginCache().plugins();
109 for (size_t i = 0; i < plugins.size(); ++i)
110 m_plugins.append(plugins[i]);
111 }
112
113 void PluginData::refresh() 73 void PluginData::refresh()
114 { 74 {
115 pluginCache().reset(true); 75 m_refresh = true;
116 pluginCache().plugins(); // Force the plugins to be reloaded now.
117 } 76 }
118 77
119 String getPluginMimeTypeFromExtension(const String& extension) 78 String getPluginMimeTypeFromExtension(const String& extension)
120 { 79 {
121 const Vector<PluginInfo>& plugins = pluginCache().plugins(); 80 Vector<PluginInfo> plugins;
81 PluginListBuilder builder(&plugins);
82 Platform::current()->getPluginList(PluginData::m_refresh, nullptr, &builder) ;
alexmos 2016/08/02 22:06:28 Why doesn't this case need the origin? (Or rather
tommycli 2016/08/02 23:03:16 Hi. This is used to fill-in the MIME types of unkn
alexmos 2016/08/04 05:32:02 Sounds reasonable to me.
83 PluginData::m_refresh = false;
122 for (size_t i = 0; i < plugins.size(); ++i) { 84 for (size_t i = 0; i < plugins.size(); ++i) {
123 for (size_t j = 0; j < plugins[i].mimes.size(); ++j) { 85 for (size_t j = 0; j < plugins[i].mimes.size(); ++j) {
124 const MimeClassInfo& mime = plugins[i].mimes[j]; 86 const MimeClassInfo& mime = plugins[i].mimes[j];
125 const Vector<String>& extensions = mime.extensions; 87 const Vector<String>& extensions = mime.extensions;
126 for (size_t k = 0; k < extensions.size(); ++k) { 88 for (size_t k = 0; k < extensions.size(); ++k) {
127 if (extension == extensions[k]) 89 if (extension == extensions[k])
128 return mime.type; 90 return mime.type;
129 } 91 }
130 } 92 }
131 } 93 }
132 return String(); 94 return String();
133 } 95 }
134 96
97 bool PluginData::m_refresh = false;
98
135 } // namespace blink 99 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698