15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/api/reading_list_private/reading_list_private_api.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string> 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <vector> 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/linked_ptr.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/dom_distiller/dom_distiller_service_factory.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/extensions/api/reading_list_private.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/dom_distiller/core/article_entry.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/dom_distiller/core/dom_distiller_service.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/web_contents.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace extensions { 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace AddEntry = api::reading_list_private::AddEntry; 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace RemoveEntry = api::reading_list_private::RemoveEntry; 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace GetEntries = api::reading_list_private::GetEntries; 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using api::reading_list_private::Entry; 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using dom_distiller::ArticleEntry; 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using dom_distiller::DomDistillerService; 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using dom_distiller::DomDistillerServiceFactory; 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool ReadingListPrivateAddEntryFunction::RunAsync() { 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<AddEntry::Params> params(AddEntry::Params::Create(*args_)); 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL url_to_add(params->entry.url); 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!url_to_add.is_valid()) { 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_ = "Invalid url specified."; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SendResponse(false); 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DomDistillerService* service = 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DomDistillerServiceFactory::GetForBrowserContext(GetProfile()); 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::Size render_view_size; 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::WebContents* web_contents = GetAssociatedWebContents(); 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (web_contents) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) render_view_size = web_contents->GetContainerBounds().size(); 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& id = service->AddToList( 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url_to_add, 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) service->CreateDefaultDistillerPage(render_view_size).Pass(), 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::Bind(&ReadingListPrivateAddEntryFunction::SendResponse, this)); 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Entry new_entry; 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new_entry.id = id; 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) results_ = AddEntry::Results::Create(new_entry); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool ReadingListPrivateRemoveEntryFunction::RunSync() { 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<RemoveEntry::Params> params(RemoveEntry::Params::Create(*args_)); 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DomDistillerService* service = 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DomDistillerServiceFactory::GetForBrowserContext(GetProfile()); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<ArticleEntry> entry(service->RemoveEntry(params->id)); 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (entry == NULL) { 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) results_ = make_scoped_ptr(new base::ListValue()); 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Entry removed_entry; 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) removed_entry.id = entry->entry_id(); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) results_ = RemoveEntry::Results::Create(removed_entry); 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool ReadingListPrivateGetEntriesFunction::RunSync() { 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DomDistillerService* service = 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DomDistillerServiceFactory::GetForBrowserContext(GetProfile()); 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<ArticleEntry>& entries = service->GetEntries(); 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<linked_ptr<Entry> > result; 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (std::vector<ArticleEntry>::const_iterator i = entries.begin(); 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu i != entries.end(); 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ++i) { 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) linked_ptr<Entry> e(new Entry); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) e->id = i->entry_id(); 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) result.push_back(e); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) results_ = GetEntries::Results::Create(result); 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace extensions 88