forked from mozilla-b2g/gaia
-
Notifications
You must be signed in to change notification settings - Fork 0
/
global_history.js
139 lines (112 loc) · 3.97 KB
/
global_history.js
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
var indexedDB = window.indexedDB || window.webkitIndexedDB ||
window.mozIndexedDB || window.msIndexedDB;
var GlobalHistory = {
addPlace: function gh_addPlace(uri) {
var place = {
uri: uri,
// Set the title to the URI for now, until a real title is received.
title: uri
};
this.db.savePlace(place);
},
addVisit: function gh_addVisit(uri) {
this.addPlace(uri);
var visit = {
uri: uri,
timestamp: new Date().getTime()
};
this.db.saveVisit(visit);
},
setPageTitle: function gh_setPageTitle(uri, title) {
var place = {
uri: uri,
title: title
};
this.db.updatePlace(place);
}
};
GlobalHistory.db = {
_db: null,
open: function db_open() {
const DB_VERSION = 1;
const DB_NAME = 'browser';
var request = indexedDB.open(DB_NAME, DB_VERSION);
request.onupgradeneeded = (function onUpgradeNeeded(e) {
console.log('Browser database upgrade needed, upgrading.');
this._db = e.target.result;
this._initializeDB();
}).bind(this);
request.onsuccess = (function onSuccess(e) {
this._db = e.target.result;
console.log('Successfully opened browser database');
}).bind(this);
request.onerror = (function onDatabaseError(e) {
console.log('Error opening browser database: ' + e.target.errorCode);
}).bind(this);
},
_initializeDB: function db_initializeDB() {
var db = this._db;
// Create or overwrite places object store
if (db.objectStoreNames.contains('places'))
db.deleteObjectStore('places');
var placeStore = db.createObjectStore('places', { keyPath: 'uri' });
// Create or overwrite visits object store
if (db.objectStoreNames.contains('visits'))
db.deleteObjectStore('visits');
var visitStore = db.createObjectStore('visits', { autoIncrement: true });
// Index visits by timestamp
visitStore.createIndex('timestamp', 'timestamp', { unique: false });
console.log("Initialised browser's global history database");
},
savePlace: function db_savePlace(place) {
var transaction = this._db.transaction(['places'],
IDBTransaction.READ_WRITE);
transaction.onerror = function dbTransactionError(e) {
console.log('Transaction error while trying to save place: ' +
place.uri);
};
var objectStore = transaction.objectStore('places');
var request = objectStore.add(place);
request.onsuccess = function onsuccess(e) {
console.log('Successfully wrote place to global history store: ' +
place.uri);
};
request.onerror = function onerror(e) {
console.log('Error while adding place to global history store: ' +
place.uri);
};
},
updatePlace: function db_updatePlace(place) {
var transaction = this._db.transaction(['places'],
IDBTransaction.READ_WRITE);
transaction.onerror = function dbTransactionError(e) {
console.log('Transaction error while trying to update place: ' +
place.uri);
};
var objectStore = transaction.objectStore('places');
var request = objectStore.put(place);
request.onsuccess = function onsuccess(e) {
console.log('Successfully updated place in global history store: ' +
place.uri);
};
request.onerror = function onerror(e) {
console.log('Error while updating place in global history store: ' +
place.uri);
};
},
saveVisit: function db_saveVisit(visit) {
var transaction = this._db.transaction(['visits'],
IDBTransaction.READ_WRITE);
transaction.onerror = function dbTransactionError(e) {
console.log('Transaction error while trying to save visit');
};
var objectStore = transaction.objectStore('visits');
var request = objectStore.add(visit);
request.onsuccess = function onsuccess(e) {
console.log('Successfully wrote visit to global history store');
};
request.onerror = function onerror(e) {
console.log('Error while adding visit to global history store');
};
}
};