2cd36b6a173cff94b857e5a54bceb387ebeb42f1
[WebKit-https.git] / WebKit / chromium / src / WebDatabase.cpp
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #include "config.h"
32 #include "WebDatabase.h"
33
34 #include "Database.h"
35 #include "DatabaseThread.h"
36 #include "Document.h"
37 #include "KURL.h"
38 #include "QuotaTracker.h"
39 #include "SecurityOrigin.h"
40 #include "WebDatabaseObserver.h"
41 #include "WebString.h"
42 #include <wtf/PassRefPtr.h>
43 #include <wtf/RefPtr.h>
44
45 using namespace WebCore;
46
47 namespace WebKit {
48
49 static WebDatabaseObserver* databaseObserver = 0;
50
51 class WebDatabasePrivate : public Database {
52 };
53
54 void WebDatabase::reset()
55 {
56     assign(0);
57 }
58
59 void WebDatabase::assign(const WebDatabase& other)
60 {
61     WebDatabasePrivate* d = const_cast<WebDatabasePrivate*>(other.m_private);
62     if (d)
63         d->ref();
64     assign(d);
65 }
66
67 WebString WebDatabase::name() const
68 {
69     ASSERT(m_private);
70     return m_private->stringIdentifier();
71 }
72
73 WebString WebDatabase::displayName() const
74 {
75     ASSERT(m_private);
76     return m_private->displayName();
77 }
78
79 unsigned long WebDatabase::estimatedSize() const
80 {
81     ASSERT(m_private);
82     return m_private->estimatedSize();
83 }
84
85 WebSecurityOrigin WebDatabase::securityOrigin() const
86 {
87     ASSERT(m_private);
88     return WebSecurityOrigin(m_private->securityOrigin());
89 }
90
91 void WebDatabase::setObserver(WebDatabaseObserver* observer)
92 {
93     databaseObserver = observer;
94 }
95
96 WebDatabaseObserver* WebDatabase::observer()
97 {
98     return databaseObserver;
99 }
100
101 void WebDatabase::updateDatabaseSize(
102     const WebString& originIdentifier, const WebString& databaseName,
103     unsigned long long databaseSize, unsigned long long spaceAvailable)
104 {
105     WebCore::QuotaTracker::instance().updateDatabaseSizeAndSpaceAvailableToOrigin(
106         originIdentifier, databaseName, databaseSize, spaceAvailable);
107 }
108
109 WebDatabase::WebDatabase(const WTF::PassRefPtr<Database>& database)
110     : m_private(static_cast<WebDatabasePrivate*>(database.releaseRef()))
111 {
112 }
113
114 WebDatabase& WebDatabase::operator=(const WTF::PassRefPtr<Database>& database)
115 {
116     assign(static_cast<WebDatabasePrivate*>(database.releaseRef()));
117     return *this;
118 }
119
120 WebDatabase::operator WTF::PassRefPtr<Database>() const
121 {
122     return PassRefPtr<Database>(const_cast<WebDatabasePrivate*>(m_private));
123 }
124
125 void WebDatabase::assign(WebDatabasePrivate* d)
126 {
127     // d is already ref'd for us by the caller
128     if (m_private)
129         m_private->deref();
130     m_private = d;
131 }
132
133 } // namespace WebKit