DOMWindowIndexedDatabase.cpp [plain text]
#include "config.h"
#include "DOMWindowIndexedDatabase.h"
#if ENABLE(INDEXED_DATABASE)
#include "DOMWindow.h"
#include "Document.h"
#include "IDBFactory.h"
#include "Page.h"
#include "PageGroupIndexedDatabase.h"
#include "SecurityOrigin.h"
namespace WebCore {
DOMWindowIndexedDatabase::DOMWindowIndexedDatabase(DOMWindow* window)
: DOMWindowProperty(window->frame())
, m_window(window)
{
}
DOMWindowIndexedDatabase::~DOMWindowIndexedDatabase()
{
}
const char* DOMWindowIndexedDatabase::supplementName()
{
return "DOMWindowIndexedDatabase";
}
DOMWindowIndexedDatabase* DOMWindowIndexedDatabase::from(DOMWindow* window)
{
DOMWindowIndexedDatabase* supplement = static_cast<DOMWindowIndexedDatabase*>(Supplement<DOMWindow>::from(window, supplementName()));
if (!supplement) {
supplement = new DOMWindowIndexedDatabase(window);
provideTo(window, supplementName(), adoptPtr(supplement));
}
return supplement;
}
void DOMWindowIndexedDatabase::disconnectFrameForPageCache()
{
m_suspendedIDBFactory = m_idbFactory.release();
DOMWindowProperty::disconnectFrameForPageCache();
}
void DOMWindowIndexedDatabase::reconnectFrameFromPageCache(Frame* frame)
{
DOMWindowProperty::reconnectFrameFromPageCache(frame);
m_idbFactory = m_suspendedIDBFactory.release();
}
void DOMWindowIndexedDatabase::willDestroyGlobalObjectInCachedFrame()
{
m_suspendedIDBFactory = nullptr;
DOMWindowProperty::willDestroyGlobalObjectInCachedFrame();
}
void DOMWindowIndexedDatabase::willDestroyGlobalObjectInFrame()
{
m_idbFactory = nullptr;
DOMWindowProperty::willDestroyGlobalObjectInFrame();
}
void DOMWindowIndexedDatabase::willDetachGlobalObjectFromFrame()
{
m_idbFactory = nullptr;
DOMWindowProperty::willDetachGlobalObjectFromFrame();
}
IDBFactory* DOMWindowIndexedDatabase::indexedDB(DOMWindow* window)
{
return from(window)->indexedDB();
}
IDBFactory* DOMWindowIndexedDatabase::indexedDB()
{
Document* document = m_window->document();
if (!document)
return 0;
Page* page = document->page();
if (!page)
return 0;
if (!m_window->isCurrentlyDisplayedInFrame())
return 0;
if (!m_idbFactory)
m_idbFactory = IDBFactory::create(PageGroupIndexedDatabase::from(page->group())->factoryBackend());
return m_idbFactory.get();
}
}
#endif // ENABLE(INDEXED_DATABASE)