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