[Title] Initial upload the browser for tizen 2.0
[profile/ivi/org.tizen.browser.git] / src / database / browser-user-agent-db.cpp
1 /*\r
2  * Copyright 2012  Samsung Electronics Co., Ltd\r
3  *\r
4  * Licensed under the Flora License, Version 1.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *    http://www.tizenopensource.org/license\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  *\r
16  */\r
17 \r
18 using namespace std;\r
19 \r
20 #include "browser-user-agent-db.h"\r
21 \r
22 sqlite3* Browser_User_Agent_DB::m_db_descriptor = NULL;\r
23 \r
24 Browser_User_Agent_DB::Browser_User_Agent_DB(void)\r
25 {\r
26         BROWSER_LOGD("[%s]", __func__);\r
27 }\r
28 \r
29 Browser_User_Agent_DB::~Browser_User_Agent_DB(void)\r
30 {\r
31         BROWSER_LOGD("[%s]", __func__);\r
32 }\r
33 \r
34 Eina_Bool Browser_User_Agent_DB::_open_db(void)\r
35 {\r
36         BROWSER_LOGD("[%s]", __func__);\r
37         int error = db_util_open(BROWSER_USER_AGENT_DB_PATH, &m_db_descriptor, DB_UTIL_REGISTER_HOOK_METHOD);\r
38         if (error != SQLITE_OK) {\r
39                 db_util_close(m_db_descriptor);\r
40                 m_db_descriptor = NULL;\r
41                 return EINA_FALSE;\r
42         }\r
43 \r
44         return EINA_TRUE;\r
45 }\r
46 \r
47 Eina_Bool Browser_User_Agent_DB::_close_db(void)\r
48 {\r
49         BROWSER_LOGD("[%s]", __func__);\r
50         if (m_db_descriptor)\r
51         {\r
52                 int error = db_util_close(m_db_descriptor);\r
53                 if (error != SQLITE_OK) {\r
54                         BROWSER_LOGE("db_util_close error");\r
55                         m_db_descriptor = NULL;\r
56                         return EINA_FALSE;\r
57                 }\r
58                 m_db_descriptor = NULL;\r
59         }\r
60 \r
61         return EINA_TRUE;\r
62 }\r
63 \r
64 Eina_Bool Browser_User_Agent_DB::get_user_agent(const char *title, char *&user_agent)\r
65 {\r
66         BROWSER_LOGD("[%s]", __func__);\r
67 \r
68         if(!strcmp(title, "System user agent")){\r
69                 user_agent = vconf_get_str(VCONFKEY_ADMIN_UAGENT);\r
70                 if (!user_agent) {\r
71                         BROWSER_LOGE("vconf_get_str(VCONFKEY_ADMIN_UAGENT) failed.");\r
72                         return EINA_FALSE;\r
73                 }\r
74                 return EINA_TRUE;\r
75         }\r
76 \r
77         if (_open_db() == EINA_FALSE)\r
78                 return EINA_FALSE;\r
79 \r
80         sqlite3_stmt *sqlite3_stmt = NULL;\r
81         int error = sqlite3_prepare_v2(m_db_descriptor, "select value from user_agents where name=?",\r
82                                         -1, &sqlite3_stmt, NULL);\r
83         if (error != SQLITE_OK) {\r
84                 BROWSER_LOGD("SQL error=%d", error);\r
85                 if (sqlite3_finalize(sqlite3_stmt) != SQLITE_OK)\r
86                         BROWSER_LOGE("sqlite3_finalize is failed.\n");\r
87                 _close_db();\r
88                 return EINA_FALSE;\r
89         }\r
90 \r
91         if (sqlite3_bind_text(sqlite3_stmt, 1, title, -1, NULL) != SQLITE_OK)\r
92                 BROWSER_LOGE("sqlite3_bind_text is failed.\n");\r
93 \r
94         error = sqlite3_step(sqlite3_stmt);\r
95 \r
96         string value;\r
97         if (error == SQLITE_ROW)\r
98                 value = reinterpret_cast<const char*>(sqlite3_column_text(sqlite3_stmt, 0));\r
99 \r
100         if (sqlite3_finalize(sqlite3_stmt) != SQLITE_OK)\r
101                 BROWSER_LOGE("sqlite3_finalize is failed.\n");\r
102 \r
103         if (!value.empty())\r
104                 user_agent = strdup(value.c_str());\r
105         else\r
106                 user_agent = NULL;\r
107 \r
108         _close_db();\r
109 \r
110         return (error == SQLITE_DONE || error == SQLITE_ROW);\r
111 }\r
112 \r