1/*
2 * Copyright (C) 2007, 2008 Apple 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
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#pragma once
30
31#include <wtf/Markable.h>
32#include <wtf/Threading.h>
33#include <wtf/WallTime.h>
34#include <wtf/text/WTFString.h>
35
36namespace WebCore {
37
38class DatabaseDetails {
39public:
40 DatabaseDetails() = default;
41
42 DatabaseDetails(const DatabaseDetails& details)
43 : m_name(details.m_name)
44 , m_displayName(details.m_displayName)
45 , m_expectedUsage(details.m_expectedUsage)
46 , m_currentUsage(details.m_currentUsage)
47 , m_creationTime(details.m_creationTime)
48 , m_modificationTime(details.m_modificationTime)
49#ifndef NDEBUG
50 , m_thread(details.m_thread.copyRef())
51#endif
52 {
53 }
54
55 DatabaseDetails& operator=(const DatabaseDetails& details)
56 {
57 m_name = details.m_name;
58 m_displayName = details.m_displayName;
59 m_expectedUsage = details.m_expectedUsage;
60 m_currentUsage = details.m_currentUsage;
61 m_creationTime = details.m_creationTime;
62 m_modificationTime = details.m_modificationTime;
63#ifndef NDEBUG
64 m_thread = details.m_thread.copyRef();
65#endif
66 return *this;
67 }
68
69 DatabaseDetails(const String& databaseName, const String& displayName, unsigned long long expectedUsage, unsigned long long currentUsage, Optional<WallTime> creationTime, Optional<WallTime> modificationTime)
70 : m_name(databaseName)
71 , m_displayName(displayName)
72 , m_expectedUsage(expectedUsage)
73 , m_currentUsage(currentUsage)
74 , m_creationTime(creationTime)
75 , m_modificationTime(modificationTime)
76 {
77 }
78
79 const String& name() const { return m_name; }
80 const String& displayName() const { return m_displayName; }
81 uint64_t expectedUsage() const { return m_expectedUsage; }
82 uint64_t currentUsage() const { return m_currentUsage; }
83 Optional<WallTime> creationTime() const { return m_creationTime; }
84 Optional<WallTime> modificationTime() const { return m_modificationTime; }
85#ifndef NDEBUG
86 Thread& thread() const { return m_thread.get(); }
87#endif
88
89private:
90 String m_name;
91 String m_displayName;
92 uint64_t m_expectedUsage { 0 };
93 uint64_t m_currentUsage { 0 };
94 Markable<WallTime, WallTime::MarkableTraits> m_creationTime;
95 Markable<WallTime, WallTime::MarkableTraits> m_modificationTime;
96#ifndef NDEBUG
97 Ref<Thread> m_thread { Thread::current() };
98#endif
99};
100
101} // namespace WebCore
102