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

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: mainFrameOrigin documentation Created 4 years, 3 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 "platform/weborigin/SecurityOrigin.h"
27 #include "public/platform/Platform.h" 28 #include "public/platform/Platform.h"
29 #include "public/platform/WebSecurityOrigin.h"
28 30
29 namespace blink { 31 namespace blink {
30 32
31 class PluginCache { 33 PluginData::PluginData(SecurityOrigin* mainFrameOrigin)
32 public: 34 : m_mainFrameOrigin(mainFrameOrigin)
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 { 35 {
62 DEFINE_STATIC_LOCAL(PluginCache, cache, ()); 36 PluginListBuilder builder(&m_plugins);
63 return cache; 37 Platform::current()->getPluginList(m_refresh, WebSecurityOrigin(m_mainFrameO rigin), &builder);
esprehn 2016/08/26 04:46:03 I don't understand how this code can work, you're
trizzofo 2016/08/26 20:28:00 It's confusing, but PluginData::refresh() is actua
tommycli 2016/08/26 20:34:16 Yes - after refresh() is called, all existing Plug
trizzofo 2016/08/26 22:19:41 Actually, when PluginData::refresh() is called, al
64 } 38 m_refresh = false;
esprehn 2016/08/26 04:46:03 What about all of the other frames?
trizzofo 2016/08/26 20:28:00 New instances of PluginData will have the updated
65
66 PluginData::PluginData(const Page* page)
67 {
68 initPlugins(page);
69 39
70 for (unsigned i = 0; i < m_plugins.size(); ++i) { 40 for (unsigned i = 0; i < m_plugins.size(); ++i) {
71 const PluginInfo& plugin = m_plugins[i]; 41 const PluginInfo& plugin = m_plugins[i];
72 for (unsigned j = 0; j < plugin.mimes.size(); ++j) { 42 for (unsigned j = 0; j < plugin.mimes.size(); ++j) {
73 m_mimes.append(plugin.mimes[j]); 43 m_mimes.append(plugin.mimes[j]);
74 m_mimePluginIndices.append(i); 44 m_mimePluginIndices.append(i);
75 } 45 }
76 } 46 }
77 } 47 }
78 48
(...skipping 17 matching lines...) Expand all
96 return 0; 66 return 0;
97 } 67 }
98 68
99 String PluginData::pluginNameForMimeType(const String& mimeType) const 69 String PluginData::pluginNameForMimeType(const String& mimeType) const
100 { 70 {
101 if (const PluginInfo* info = pluginInfoForMimeType(mimeType)) 71 if (const PluginInfo* info = pluginInfoForMimeType(mimeType))
102 return info->name; 72 return info->name;
103 return String(); 73 return String();
104 } 74 }
105 75
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() 76 void PluginData::refresh()
114 { 77 {
115 pluginCache().reset(true); 78 m_refresh = true;
116 pluginCache().plugins(); // Force the plugins to be reloaded now.
117 } 79 }
118 80
81 bool PluginData::m_refresh = false;
82
119 } // namespace blink 83 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698