Index: chrome/browser/webdata/web_intents_table.cc |
diff --git a/chrome/browser/webdata/web_intents_table.cc b/chrome/browser/webdata/web_intents_table.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e3b7bbfd9d1fc061f0918161a8fd05fbdfce8e10 |
--- /dev/null |
+++ b/chrome/browser/webdata/web_intents_table.cc |
@@ -0,0 +1,104 @@ |
+// Copyright (c) 2011 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 "chrome/browser/webdata/web_intents_table.h" |
+ |
+#include "base/logging.h" |
+#include "googleurl/src/gurl.h" |
+#include "sql/statement.h" |
+ |
+WebIntentsTable::WebIntentsTable(sql::Connection* db, |
+ sql::MetaTable* meta_table) |
+ : WebDatabaseTable(db, meta_table) { |
+} |
+ |
+WebIntentsTable::~WebIntentsTable() { |
+} |
+ |
+bool WebIntentsTable::Init() { |
+ if (db_->DoesTableExist("web_intents")) |
+ return true; |
+ |
+ if (!db_->Execute("CREATE TABLE web_intents (" |
+ "service_url LONGVARCHAR," |
+ "action VARCHAR," |
+ "type VARCHAR," |
+ "UNIQUE (service_url, action, type))")) { |
+ NOTREACHED(); |
+ return false; |
+ } |
+ |
+ if (!db_->Execute("CREATE INDEX web_intents_index " |
+ "ON web_intents (action)")) { |
+ NOTREACHED(); |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
+// TODO(jhawkins): Figure out Sync story. |
+bool WebIntentsTable::IsSyncable() { |
+ return false; |
+} |
+ |
+bool WebIntentsTable::GetWebIntents(const string16& action, |
+ std::vector<WebIntentData>* intents) { |
+ DCHECK(intents); |
+ sql::Statement s(db_->GetUniqueStatement( |
+ "SELECT service_url, action, type FROM web_intents " |
+ "WHERE action=?")); |
+ if (!s) { |
+ NOTREACHED() << "Statement prepare failed"; |
+ return false; |
+ } |
+ |
+ s.BindString16(0, action); |
+ while (s.Step()) { |
+ WebIntentData intent; |
+ string16 tmp = s.ColumnString16(0); |
+ intent.service_url = GURL(tmp); |
+ |
+ intent.action = s.ColumnString16(1); |
+ intent.type = s.ColumnString16(2); |
+ |
+ intents->push_back(intent); |
+ } |
+ return true; |
+} |
+ |
+bool WebIntentsTable::SetWebIntent(const string16& action, |
+ const string16& type, |
+ const GURL& service_url) { |
+ sql::Statement s(db_->GetUniqueStatement( |
+ "INSERT OR REPLACE INTO web_intents (service_url, type, action) " |
+ "VALUES (?, ?, ?)")); |
+ if (!s) { |
+ NOTREACHED() << "Statement prepare failed"; |
+ return false; |
+ } |
+ |
+ s.BindString(0, service_url.spec()); |
+ s.BindString16(1, type); |
+ s.BindString16(2, action); |
+ return s.Run(); |
+} |
+ |
+bool WebIntentsTable::RemoveWebIntent(const string16& action, |
+ const string16& type, |
+ const GURL& service_url) { |
+ sql::Statement delete_s(db_->GetUniqueStatement( |
+ "DELETE FROM web_intents " |
+ "WHERE service_url = ? AND action = ? AND type = ?")); |
+ if (!delete_s) { |
+ NOTREACHED() << "Statement prepare failed"; |
+ return false; |
+ } |
+ |
+ delete_s.BindString(0, service_url.spec()); |
+ delete_s.BindString16(1, action); |
+ delete_s.BindString16(2, type); |
+ return delete_s.Run(); |
+} |
+ |