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)#ifndef CHROME_UTILITY_CHROME_CONTENT_UTILITY_CLIENT_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_UTILITY_CHROME_CONTENT_UTILITY_CLIENT_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/scoped_vector.h"
10558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/common/media_galleries/picasa_types.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/utility/content_utility_client.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ipc/ipc_platform_file.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct FileDescriptor;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace metadata {
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MediaMetadataParser;
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass UtilityMessageHandler;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeContentUtilityClient : public content::ContentUtilityClient {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeContentUtilityClient();
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual ~ChromeContentUtilityClient();
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UtilityThreadStarted() OVERRIDE;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  static void PreSandboxStartup();
34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IPC message handlers.
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnUnpackExtension(const base::FilePath& extension_path,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const std::string& extension_id,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         int location, int creation_flags);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUnpackWebResource(const std::string& resource_data);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnParseUpdateManifest(const std::string& xml);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnDecodeImage(const std::vector<unsigned char>& encoded_data);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnDecodeImageBase64(const std::string& encoded_data);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnRobustJPEGDecodeImage(
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<unsigned char>& encoded_data);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnParseJSON(const std::string& json);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnCreateZipFile(const base::FilePath& src_dir,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       const std::vector<base::FilePath>& src_relative_paths,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       const base::FileDescriptor& dest_fd);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // defined(OS_CHROMEOS)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void OnPatchFileBsdiff(const base::FilePath& input_file,
55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                         const base::FilePath& patch_file,
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                         const base::FilePath& output_file);
57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void OnPatchFileCourgette(const base::FilePath& input_file,
58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            const base::FilePath& patch_file,
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            const base::FilePath& output_file);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnStartupPing();
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnAnalyzeZipFileForDownloadProtection(
62ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const IPC::PlatformFileForTransit& zip_file);
63ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#if !defined(OS_ANDROID) && !defined(OS_IOS)
64ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  void OnCheckMediaFile(int64 milliseconds_of_decoding,
65ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                        const IPC::PlatformFileForTransit& media_file);
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void OnParseMediaMetadata(const std::string& mime_type, int64 total_size,
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                            bool get_attached_images);
68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#endif  // !defined(OS_ANDROID) && !defined(OS_IOS)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_WIN)
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void OnParseITunesPrefXml(const std::string& itunes_xml_data);
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif  // defined(OS_WIN)
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_MACOSX)
758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  void OnParseIPhotoLibraryXmlFile(
768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const IPC::PlatformFileForTransit& iphoto_library_file);
778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif  // defined(OS_MACOSX)
788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_WIN) || defined(OS_MACOSX)
80558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void OnParseITunesLibraryXmlFile(
81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const IPC::PlatformFileForTransit& itunes_library_file);
82558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void OnParsePicasaPMPDatabase(
847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const picasa::AlbumTableFilesForTransit& album_table_files);
857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
86558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void OnIndexPicasaAlbumsContents(
87558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      const picasa::AlbumUIDSet& album_uids,
88558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      const std::vector<picasa::FolderINIContents>& folders_inis);
89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif  // defined(OS_WIN) || defined(OS_MACOSX)
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_WIN)
92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void OnGetAndEncryptWiFiCredentials(const std::string& network_guid,
93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                      const std::vector<uint8>& public_key);
94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif  // defined(OS_WIN)
95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  typedef ScopedVector<UtilityMessageHandler> Handlers;
977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  Handlers handlers_;
98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Flag to enable whitelisting.
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool filter_messages_;
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // A list of message_ids to filter.
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::set<int> message_id_whitelist_;
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeContentUtilityClient);
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_UTILITY_CHROME_CONTENT_UTILITY_CLIENT_H_
108