1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/media_galleries/fileapi/safe_itunes_pref_parser_win.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/common/extensions/chrome_utility_extensions_messages.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/browser/browser_thread.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/browser/utility_process_host.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing content::BrowserThread; 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing content::UtilityProcessHost; 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace itunes { 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochSafeITunesPrefParserWin::SafeITunesPrefParserWin( 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& unsafe_xml, 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const ParserCallback& callback) 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : unsafe_xml_(unsafe_xml), 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback_(callback), 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch parser_state_(INITIAL_STATE) { 22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::FILE); 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(!callback_.is_null()); 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SafeITunesPrefParserWin::Start() { 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::FILE); 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch BrowserThread::PostTask( 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch BrowserThread::IO, 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FROM_HERE, 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&SafeITunesPrefParserWin::StartWorkOnIOThread, this)); 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochSafeITunesPrefParserWin::~SafeITunesPrefParserWin() { 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SafeITunesPrefParserWin::StartWorkOnIOThread() { 38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_EQ(INITIAL_STATE, parser_state_); 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UtilityProcessHost* host = 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UtilityProcessHost::Create(this, base::MessageLoopProxy::current()); 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->Send(new ChromeUtilityMsg_ParseITunesPrefXml(unsafe_xml_)); 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch parser_state_ = STARTED_PARSING_STATE; 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SafeITunesPrefParserWin::OnGotITunesDirectory( 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::FilePath& library_file) { 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (parser_state_ != STARTED_PARSING_STATE) 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(callback_, library_file)); 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch parser_state_ = FINISHED_PARSING_STATE; 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SafeITunesPrefParserWin::OnProcessCrashed(int exit_code) { 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch OnGotITunesDirectory(base::FilePath()); 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool SafeITunesPrefParserWin::OnMessageReceived( 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const IPC::Message& message) { 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool handled = true; 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IPC_BEGIN_MESSAGE_MAP(SafeITunesPrefParserWin, message) 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_GotITunesDirectory, 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch OnGotITunesDirectory) 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IPC_MESSAGE_UNHANDLED(handled = false) 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IPC_END_MESSAGE_MAP() 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return handled; 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace itunes 74