diff options
author | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-26 23:55:29 +0000 |
---|---|---|
committer | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-26 23:55:29 +0000 |
commit | 09911bf300f1a419907a9412154760efd0b7abc3 (patch) | |
tree | f131325fb4e2ad12c6d3504ab75b16dd92facfed /chrome/renderer/render_process.h | |
parent | 586acc5fe142f498261f52c66862fa417c3d52d2 (diff) | |
download | chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.zip chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.gz chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.bz2 |
Add chrome to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/render_process.h')
-rw-r--r-- | chrome/renderer/render_process.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/chrome/renderer/render_process.h b/chrome/renderer/render_process.h new file mode 100644 index 0000000..49f43e2 --- /dev/null +++ b/chrome/renderer/render_process.h @@ -0,0 +1,126 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef CHROME_RENDERER_RENDER_PROCESS_H__ +#define CHROME_RENDERER_RENDER_PROCESS_H__ + +#include <objidl.h> +#include <mlang.h> + +#include "base/shared_memory.h" +#include "chrome/common/child_process.h" +#include "chrome/renderer/render_thread.h" + +class RenderView; + +// Represents the renderer end of the browser<->renderer connection. The +// opposite end is the RenderProcessHost. This is a singleton object for +// each renderer. +class RenderProcess : public ChildProcess { + public: + static bool GlobalInit(const std::wstring& channel_name); + static void GlobalCleanup(); + + // Returns true if plugins should be loaded in-process. + static bool ShouldLoadPluginsInProcess(); + + static IMLangFontLink2* GetLangFontLink(); + + // Allocates shared memory. When no longer needed, you should pass the + // SharedMemory pointer to FreeSharedMemory so it can be recycled. The size + // reported in the resulting SharedMemory object will be greater than or + // equal to the requested size. This method returns NULL if unable to + // allocate memory for some reason. + static SharedMemory* AllocSharedMemory(size_t size); + + // Frees shared memory allocated by AllocSharedMemory. You should only use + // this function to free the SharedMemory object. + static void FreeSharedMemory(SharedMemory* mem); + + private: + friend class ChildProcessFactory<RenderProcess>; + RenderProcess(const std::wstring& channel_name); + ~RenderProcess(); + + // Initializes the LangFontLink object. This function cannot be called + // while the process is restricted by the sandbox or it will fail. + static void InitializeLangFontLink(); + + // Releases the LangFontLink object if already created. + static void ReleaseLangFontLink(); + + // Returns a pointer to the RenderProcess singleton instance. This is + // guaranteed to be non-NULL between calls to GlobalInit and GlobalCleanup. + static RenderProcess* self() { + return static_cast<RenderProcess*>(child_process_); + } + + static ChildProcess* ClassFactory(const std::wstring& channel_name); + + // This is here so consumers will use FreeSharedMemory instead. A destructor + // on SharedMemory would be too tempting. + static void DeleteSharedMem(SharedMemory* mem); + + // Look in the shared memory cache for a suitable object to reuse. Returns + // NULL if there is none. + SharedMemory* GetSharedMemFromCache(size_t size); + + // Maybe put the given shared memory into the shared memory cache. Returns + // true if the SharedMemory object was stored in the cache; otherwise, false + // is returned. + bool PutSharedMemInCache(SharedMemory* mem); + + void ClearSharedMemCache(); + + // We want to lazily clear the shared memory cache if no one has requested + // memory. This methods are used to schedule a deferred call to + // RenderProcess::ClearSharedMemCache. + void ScheduleCacheClearer(); + + // ChildProcess implementation + virtual void Cleanup(); + + // The one render thread (to be replaced with a set of render threads). + RenderThread render_thread_; + + // A very simplistic and small cache. If an entry in this array is non-null, + // then it points to a SharedMemory object that is available for reuse. + SharedMemory* shared_mem_cache_[2]; + + // This factory is used to lazily invoke ClearSharedMemCache. + ScopedRunnableMethodFactory<RenderProcess> clearer_factory_; + + static IMLangFontLink2* lang_font_link_; + + static bool load_plugins_in_process_; + + DISALLOW_EVIL_CONSTRUCTORS(RenderProcess); +}; + +#endif // CHROME_RENDERER_RENDER_PROCESS_H__ |