1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (c) 2008, 2009, Google Inc. All rights reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met: 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions of source code must retain the above copyright 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions in binary form must reproduce the above 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution. 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Neither the name of Google Inc. nor the names of its 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission. 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h" 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "PluginDataChromium.h" 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 34ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "PlatformBridge.h" 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass PluginCache { 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectpublic: 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project PluginCache() : m_loaded(false), m_refresh(false) {} 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ~PluginCache() { reset(false); } 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void reset(bool refresh) 44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_plugins.clear(); 46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_loaded = false; 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_refresh = refresh; 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 505af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke const Vector<PluginInfo>& plugins() 51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!m_loaded) { 53ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::plugins(m_refresh, &m_plugins); 54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_loaded = true; 55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_refresh = false; 56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_plugins; 58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectprivate: 615af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke Vector<PluginInfo> m_plugins; 62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_loaded; 63635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_refresh; 64635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}; 65635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic PluginCache pluginCache; 67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 68cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid PluginData::initPlugins(const Page*) 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 705af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke const Vector<PluginInfo>& plugins = pluginCache.plugins(); 71635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project for (size_t i = 0; i < plugins.size(); ++i) 725af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke m_plugins.append(plugins[i]); 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid PluginData::refresh() 76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginCache.reset(true); 785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian pluginCache.plugins(); // Force the plugins to be reloaded now. 79635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 80635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectString getPluginMimeTypeFromExtension(const String& extension) 82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 835af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke const Vector<PluginInfo>& plugins = pluginCache.plugins(); 84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project for (size_t i = 0; i < plugins.size(); ++i) { 855af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke for (size_t j = 0; j < plugins[i].mimes.size(); ++j) { 865af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke const MimeClassInfo& mime = plugins[i].mimes[j]; 8706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen const Vector<String>& extensions = mime.extensions; 88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project for (size_t k = 0; k < extensions.size(); ++k) { 89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (extension == extensions[k]) 905af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke return mime.type; 91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return String(); 95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 96635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace WebCore 98