18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  Copyright (C) 2008 Apple Inc. All rights reserved.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is free software; you can redistribute it and/or
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  modify it under the terms of the GNU Lesser General Public
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License as published by the Free Software Foundation; either
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  version 2 of the License, or (at your option) any later version.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is distributed in the hope that it will be useful,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Lesser General Public License for more details.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  You should have received a copy of the GNU Lesser General Public
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License along with this library; if not, write to the Free Software
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
21e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "DOMMimeTypeArray.h"
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
23e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "DOMPlugin.h"
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h"
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h"
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginData.h"
27f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/AtomicString.h>
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
31e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeDOMMimeTypeArray::DOMMimeTypeArray(Frame* frame)
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : m_frame(frame)
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
36e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeDOMMimeTypeArray::~DOMMimeTypeArray()
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
40e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeunsigned DOMMimeTypeArray::length() const
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PluginData* data = getPluginData();
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!data)
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return data->mimes().size();
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
48e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkePassRefPtr<DOMMimeType> DOMMimeTypeArray::item(unsigned index)
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PluginData* data = getPluginData();
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!data)
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
535af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    const Vector<MimeClassInfo>& mimes = data->mimes();
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (index >= mimes.size())
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
56cad810f21b803229eb11403f9209855525a25d57Steve Block    return DOMMimeType::create(data, m_frame, index).get();
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
59e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkebool DOMMimeTypeArray::canGetItemsForName(const AtomicString& propertyName)
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PluginData *data = getPluginData();
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!data)
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
645af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    const Vector<MimeClassInfo>& mimes = data->mimes();
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (unsigned i = 0; i < mimes.size(); ++i) {
665af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        if (mimes[i].type == propertyName)
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return true;
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
72e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkePassRefPtr<DOMMimeType> DOMMimeTypeArray::namedItem(const AtomicString& propertyName)
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PluginData *data = getPluginData();
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!data)
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
775af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    const Vector<MimeClassInfo>& mimes = data->mimes();
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (unsigned i = 0; i < mimes.size(); ++i) {
795af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        if (mimes[i].type == propertyName)
80cad810f21b803229eb11403f9209855525a25d57Steve Block            return DOMMimeType::create(data, m_frame, i).get();
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return 0;
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
85e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkePluginData* DOMMimeTypeArray::getPluginData() const
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_frame)
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Page* p = m_frame->page();
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!p)
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return p->pluginData();
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
96