1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project// Copyright 2014 The Chromium Authors. All rights reserved. 2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be 305436638acc7c010349a69c3395f1a57c642dc62Ying Wang// found in the LICENSE file. 405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project// http://code.google.com/p/chromium/wiki/LinuxSandboxIPC 605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef CONTENT_BROWSER_RENDERER_HOST_SANDBOX_IPC_H_ 805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define CONTENT_BROWSER_RENDERER_HOST_SANDBOX_IPC_H_ 905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <vector> 11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "base/files/scoped_file.h" 13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "base/memory/scoped_ptr.h" 14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "base/pickle.h" 15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "base/threading/simple_thread.h" 16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "content/child/blink_platform_impl.h" 1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "skia/ext/skia_utils_base.h" 18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 1905436638acc7c010349a69c3395f1a57c642dc62Ying Wangnamespace content { 20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectclass SandboxIPCHandler : public base::DelegateSimpleThread::Delegate { 22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project public: 2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang // lifeline_fd: the read end of a pipe which the main thread holds 2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang // the other end of. 2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang // browser_socket: the browser's end of the sandbox IPC socketpair. 26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project SandboxIPCHandler(int lifeline_fd, int browser_socket); 27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project virtual ~SandboxIPCHandler(); 28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project virtual void Run() OVERRIDE; 3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang private: 3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang void EnsureWebKitInitialized(); 3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang int FindOrAddPath(const SkString& path); 3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang void HandleRequestFromRenderer(int fd); 3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang void HandleFontMatchRequest(int fd, 3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang const Pickle& pickle, 4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang PickleIterator iter, 4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang const std::vector<base::ScopedFD*>& fds); 4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang void HandleFontOpenRequest(int fd, 4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang const Pickle& pickle, 4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang PickleIterator iter, 4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang const std::vector<base::ScopedFD*>& fds); 47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang void HandleGetFallbackFontForChar(int fd, 4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang const Pickle& pickle, 5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang PickleIterator iter, 5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang const std::vector<base::ScopedFD*>& fds); 5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang void HandleGetStyleForStrike(int fd, 54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project const Pickle& pickle, 55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project PickleIterator iter, 5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang const std::vector<base::ScopedFD*>& fds); 5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project void HandleLocaltime(int fd, 59 const Pickle& pickle, 60 PickleIterator iter, 61 const std::vector<base::ScopedFD*>& fds); 62 63 void HandleMakeSharedMemorySegment(int fd, 64 const Pickle& pickle, 65 PickleIterator iter, 66 const std::vector<base::ScopedFD*>& fds); 67 68 void HandleMatchWithFallback(int fd, 69 const Pickle& pickle, 70 PickleIterator iter, 71 const std::vector<base::ScopedFD*>& fds); 72 73 void SendRendererReply(const std::vector<base::ScopedFD*>& fds, 74 const Pickle& reply, 75 int reply_fd); 76 77 const int lifeline_fd_; 78 const int browser_socket_; 79 scoped_ptr<BlinkPlatformImpl> webkit_platform_support_; 80 SkTDArray<SkString*> paths_; 81 82 DISALLOW_COPY_AND_ASSIGN(SandboxIPCHandler); 83}; 84 85} // namespace content 86 87#endif // CONTENT_BROWSER_RENDERER_HOST_SANDBOX_IPC_H_ 88