15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/web_data_service.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/bind.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/keyword_table.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/logins_table.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/web_apps_table.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/web_intents_table.h" 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/webdata/token_service_table.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/web_database_service.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebDataService implementation. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Bind; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WDAppImagesResult::WDAppImagesResult() : has_all_images(false) {} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WDAppImagesResult::~WDAppImagesResult() {} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WDKeywordsResult::WDKeywordsResult() 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : default_search_provider_id(0), 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) builtin_keyword_version(0) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WDKeywordsResult::~WDKeywordsResult() {} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochWebDataService::KeywordBatchModeScoper::KeywordBatchModeScoper( 45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch WebDataService* service) 46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : service_(service) { 47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (service_) 48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch service_->AdjustKeywordBatchModeLevel(true); 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochWebDataService::KeywordBatchModeScoper::~KeywordBatchModeScoper() { 52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (service_) 53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch service_->AdjustKeywordBatchModeLevel(false); 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataService::WebDataService(scoped_refptr<WebDatabaseService> wdbs, 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ProfileErrorCallback& callback) 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : WebDataServiceBase( 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch wdbs, callback, 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), 61e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch keyword_batch_mode_level_(0) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////// 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Keywords. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////// 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebDataService::AddKeyword(const TemplateURLData& data) { 71e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (keyword_batch_mode_level_) { 72e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch queued_keyword_operations_.push_back( 73e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch KeywordTable::Operation(KeywordTable::ADD, data)); 74e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } else { 75e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch AdjustKeywordBatchModeLevel(true); 76e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch AddKeyword(data); 77e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch AdjustKeywordBatchModeLevel(false); 78e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebDataService::RemoveKeyword(TemplateURLID id) { 82e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (keyword_batch_mode_level_) { 83e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch TemplateURLData data; 84e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch data.id = id; 85e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch queued_keyword_operations_.push_back( 86e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch KeywordTable::Operation(KeywordTable::REMOVE, data)); 87e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } else { 88e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch AdjustKeywordBatchModeLevel(true); 89e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch RemoveKeyword(id); 90e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch AdjustKeywordBatchModeLevel(false); 91e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebDataService::UpdateKeyword(const TemplateURLData& data) { 95e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (keyword_batch_mode_level_) { 96e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch queued_keyword_operations_.push_back( 97e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch KeywordTable::Operation(KeywordTable::UPDATE, data)); 98e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } else { 99e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch AdjustKeywordBatchModeLevel(true); 100e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch UpdateKeyword(data); 101e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch AdjustKeywordBatchModeLevel(false); 102e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceBase::Handle WebDataService::GetKeywords( 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebDataServiceConsumer* consumer) { 107e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return wdbs_->ScheduleDBTaskWithResult( 108e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FROM_HERE, Bind(&WebDataService::GetKeywordsImpl, this), consumer); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 111e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid WebDataService::SetDefaultSearchProviderID(TemplateURLID id) { 112e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch wdbs_->ScheduleDBTask( 113e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FROM_HERE, 114e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Bind(&WebDataService::SetDefaultSearchProviderIDImpl, this, id)); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebDataService::SetBuiltinKeywordVersion(int version) { 118e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch wdbs_->ScheduleDBTask( 119e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FROM_HERE, 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Bind(&WebDataService::SetBuiltinKeywordVersionImpl, this, version)); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////// 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Web Apps 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////// 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebDataService::SetWebAppImage(const GURL& app_url, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SkBitmap& image) { 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wdbs_->ScheduleDBTask(FROM_HERE, 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Bind(&WebDataService::SetWebAppImageImpl, this, app_url, image)); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebDataService::SetWebAppHasAllImages(const GURL& app_url, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_all_images) { 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wdbs_->ScheduleDBTask(FROM_HERE, 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Bind(&WebDataService::SetWebAppHasAllImagesImpl, this, app_url, 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_all_images)); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebDataService::RemoveWebApp(const GURL& app_url) { 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wdbs_->ScheduleDBTask(FROM_HERE, 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Bind(&WebDataService::RemoveWebAppImpl, this, app_url)); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceBase::Handle WebDataService::GetWebAppImages( 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& app_url, WebDataServiceConsumer* consumer) { 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Bind(&WebDataService::GetWebAppImagesImpl, this, app_url), consumer); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataService::WebDataService() 156e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : WebDataServiceBase( 157e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch NULL, ProfileErrorCallback(), 158e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), 159e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch keyword_batch_mode_level_(0) { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataService::~WebDataService() { 163e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DCHECK(!keyword_batch_mode_level_); 164e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 165e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 166e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid WebDataService::AdjustKeywordBatchModeLevel(bool entering_batch_mode) { 167e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (entering_batch_mode) { 168e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ++keyword_batch_mode_level_; 169e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } else { 170e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DCHECK(keyword_batch_mode_level_); 171e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch --keyword_batch_mode_level_; 172e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (!keyword_batch_mode_level_ && !queued_keyword_operations_.empty()) { 173e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch wdbs_->ScheduleDBTask( 174e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FROM_HERE, 175e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Bind(&WebDataService::PerformKeywordOperationsImpl, this, 176e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch queued_keyword_operations_)); 177e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch queued_keyword_operations_.clear(); 178e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 179e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Keywords implementation. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 188e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochWebDatabase::State WebDataService::PerformKeywordOperationsImpl( 189e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const KeywordTable::Operations& operations, 190e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch WebDatabase* db) { 191e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return KeywordTable::FromWebDatabase(db)->PerformOperations(operations) ? 192e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<WDTypedResult> WebDataService::GetKeywordsImpl(WebDatabase* db) { 196e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_ptr<WDTypedResult> result_ptr; 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WDKeywordsResult result; 198e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (KeywordTable::FromWebDatabase(db)->GetKeywords(&result.keywords)) { 199e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch result.default_search_provider_id = 200e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch KeywordTable::FromWebDatabase(db)->GetDefaultSearchProviderID(); 201e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch result.builtin_keyword_version = 202e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch KeywordTable::FromWebDatabase(db)->GetBuiltinKeywordVersion(); 203e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch result_ptr.reset(new WDResult<WDKeywordsResult>(KEYWORDS_RESULT, result)); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 205e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return result_ptr.Pass(); 206e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 207e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 208e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochWebDatabase::State WebDataService::SetDefaultSearchProviderIDImpl( 209e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch TemplateURLID id, 210e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch WebDatabase* db) { 211e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return KeywordTable::FromWebDatabase(db)->SetDefaultSearchProviderID(id) ? 212e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDatabase::State WebDataService::SetBuiltinKeywordVersionImpl( 216e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch int version, 217e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch WebDatabase* db) { 218e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return KeywordTable::FromWebDatabase(db)->SetBuiltinKeywordVersion(version) ? 219e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Web Apps implementation. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDatabase::State WebDataService::SetWebAppImageImpl( 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& app_url, const SkBitmap& image, WebDatabase* db) { 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebAppsTable::FromWebDatabase(db)->SetWebAppImage(app_url, image); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebDatabase::COMMIT_NEEDED; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDatabase::State WebDataService::SetWebAppHasAllImagesImpl( 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& app_url, bool has_all_images, WebDatabase* db) { 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebAppsTable::FromWebDatabase(db)->SetWebAppHasAllImages(app_url, 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_all_images); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebDatabase::COMMIT_NEEDED; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDatabase::State WebDataService::RemoveWebAppImpl( 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& app_url, WebDatabase* db) { 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebAppsTable::FromWebDatabase(db)->RemoveWebApp(app_url); 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebDatabase::COMMIT_NEEDED; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<WDTypedResult> WebDataService::GetWebAppImagesImpl( 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& app_url, WebDatabase* db) { 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WDAppImagesResult result; 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.has_all_images = 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebAppsTable::FromWebDatabase(db)->GetWebAppHasAllImages(app_url); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebAppsTable::FromWebDatabase(db)->GetWebAppImages(app_url, &result.images); 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<WDTypedResult>( 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new WDResult<WDAppImagesResult>(WEB_APP_IMAGES, result)); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 256