1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "config.h"
#include "modules/serviceworkers/HeaderMap.h"
#include "bindings/v8/ExceptionState.h"
#include "modules/serviceworkers/HeaderMapForEachCallback.h"
#include "wtf/PassRefPtr.h"
#include "wtf/RefPtr.h"
#include "wtf/text/WTFString.h"
namespace WebCore {
PassRefPtr<HeaderMap> HeaderMap::create()
{
return adoptRef(new HeaderMap);
}
PassRefPtr<HeaderMap> HeaderMap::create(const HashMap<String, String>& headers)
{
return adoptRef(new HeaderMap(headers));
}
unsigned long HeaderMap::size() const
{
return m_headers.size();
}
void HeaderMap::clear()
{
m_headers.clear();
}
bool HeaderMap::remove(const String& key)
{
if (!has(key))
return false;
m_headers.remove(key);
return true;
}
String HeaderMap::get(const String& key)
{
return m_headers.get(key);
}
bool HeaderMap::has(const String& key)
{
return m_headers.find(key) != m_headers.end();
}
void HeaderMap::set(const String& key, const String& value)
{
m_headers.set(key, value);
}
void HeaderMap::forEach(PassOwnPtr<HeaderMapForEachCallback> callback, ScriptValue& thisArg)
{
forEachInternal(callback, &thisArg);
}
void HeaderMap::forEach(PassOwnPtr<HeaderMapForEachCallback> callback)
{
forEachInternal(callback, 0);
}
HeaderMap::HeaderMap()
{
ScriptWrappable::init(this);
}
HeaderMap::HeaderMap(const HashMap<String, String>& headers)
: m_headers(headers)
{
ScriptWrappable::init(this);
}
void HeaderMap::forEachInternal(PassOwnPtr<HeaderMapForEachCallback> callback, ScriptValue* thisArg)
{
TrackExceptionState exceptionState;
for (HashMap<String, String>::const_iterator it = m_headers.begin(); it != m_headers.end(); ++it) {
if (thisArg)
callback->handleItem(*thisArg, it->value, it->key, this);
else
callback->handleItem(it->value, it->key, this);
if (exceptionState.hadException())
break;
}
}
} // namespace WebCore
|