summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/url_actions.cc
blob: 06dd541821372cd74a5d109d44e417503e8d3b60 (plain)
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
// 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