// Copyright (c) 2013 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 "base/logging.h" #include "base/utf_string_conversions.h" #include "chrome/browser/extensions/url_actions.h" #include "content/public/browser/browser_thread.h" using content::BrowserThread; namespace extensions { const char* UrlAction::kTableName = "activitylog_urls"; const char* UrlAction::kTableStructure = "(" "extension_id LONGVARCHAR NOT NULL, " "time INTEGER NOT NULL, " "url_action_type LONGVARCHAR NOT NULL, " "url LONGVARCHAR NOT NULL, " "url_title LONGVARCHAR, " "tech_message LONGVARCHAR NOT NULL, " "extra LONGCHAR VAR NOT NULL)"; UrlAction::UrlAction(const std::string& extension_id, const base::Time& time, const UrlActionType verb, const GURL& url, const string16& url_title, const std::string& tech_message, const std::string& extra) : extension_id_(extension_id), time_(time), verb_(verb), url_(url), url_title_(url_title), technical_message_(tech_message), extra_(extra) { } UrlAction::~UrlAction() { } void UrlAction::Record(sql::Connection* db) { std::string sql_str = "INSERT INTO " + std::string(kTableName) + " (extension_id, time, url_action_type, url, url_title, tech_message," " extra) VALUES (?,?,?,?,?,?,?)"; sql::Statement statement(db->GetCachedStatement( sql::StatementID(SQL_FROM_HERE), sql_str.c_str())); statement.BindString(0, extension_id_); statement.BindInt64(1, time_.ToInternalValue()); statement.BindString(2, VerbAsString()); statement.BindString(3, history::URLDatabase::GURLToDatabaseURL(url_)); statement.BindString16(4, url_title_); statement.BindString(5, technical_message_); statement.BindString(6, extra_); if (!statement.Run()) LOG(ERROR) << "Activity log database I/O failed: " << sql_str; } std::string UrlAction::PrettyPrintFori18n() { // TODO(felt): implement this for real when the UI is redesigned. return PrettyPrintForDebug(); } std::string UrlAction::PrettyPrintForDebug() { // TODO(felt): implement this for real when the UI is redesigned. return "Injected scripts (" + technical_message_ + ") onto " + std::string(url_.spec()); } std::string UrlAction::VerbAsString() const { switch (verb_) { case MODIFIED: return "MODIFIED"; case READ: return "READ"; case INSERTED: return "INSERTED"; case XHR: return "XHR"; default: NOTREACHED(); return NULL; } } UrlAction::UrlActionType UrlAction::StringAsUrlActionType( const std::string& str) { if (str == "MODIFIED") { return MODIFIED; } else if (str == "READ") { return READ; } else if (str == "INSERTED") { return INSERTED; } else if (str == "XHR") { return XHR; } else { NOTREACHED(); return MODIFIED; // this should never happen! } } } // namespace extensions