Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/render_frame_impl.h" | 5 #include "content/renderer/render_frame_impl.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 2149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2160 // We only notify the browser process when the frame is being detached for | 2160 // We only notify the browser process when the frame is being detached for |
| 2161 // removal. If the frame is being detached for swap, we don't need to do this | 2161 // removal. If the frame is being detached for swap, we don't need to do this |
| 2162 // since we are not modifiying the frame tree. | 2162 // since we are not modifiying the frame tree. |
| 2163 if (type == DetachType::Remove) | 2163 if (type == DetachType::Remove) |
| 2164 Send(new FrameHostMsg_Detach(routing_id_)); | 2164 Send(new FrameHostMsg_Detach(routing_id_)); |
| 2165 | 2165 |
| 2166 // The |is_detaching_| flag disables Send(). FrameHostMsg_Detach must be | 2166 // The |is_detaching_| flag disables Send(). FrameHostMsg_Detach must be |
| 2167 // sent before setting |is_detaching_| to true. | 2167 // sent before setting |is_detaching_| to true. |
| 2168 is_detaching_ = true; | 2168 is_detaching_ = true; |
| 2169 | 2169 |
| 2170 if (render_widget_) { | |
|
Charlie Reis
2015/07/09 21:06:19
nit: No braces. Same below.
| |
| 2171 render_widget_->UnregisterRenderFrame(this); | |
| 2172 } | |
| 2173 | |
| 2170 // We need to clean up subframes by removing them from the map and deleting | 2174 // We need to clean up subframes by removing them from the map and deleting |
| 2171 // the RenderFrameImpl. In contrast, the main frame is owned by its | 2175 // the RenderFrameImpl. In contrast, the main frame is owned by its |
| 2172 // containing RenderViewHost (so that they have the same lifetime), so only | 2176 // containing RenderViewHost (so that they have the same lifetime), so only |
| 2173 // removal from the map is needed and no deletion. | 2177 // removal from the map is needed and no deletion. |
| 2174 FrameMap::iterator it = g_frame_map.Get().find(frame); | 2178 FrameMap::iterator it = g_frame_map.Get().find(frame); |
| 2175 CHECK(it != g_frame_map.Get().end()); | 2179 CHECK(it != g_frame_map.Get().end()); |
| 2176 CHECK_EQ(it->second, this); | 2180 CHECK_EQ(it->second, this); |
| 2177 g_frame_map.Get().erase(it); | 2181 g_frame_map.Get().erase(it); |
| 2178 | 2182 |
| 2179 if (is_subframe_) { | 2183 // Only remove the frame from the renderer's frame tree if the frame is |
| 2180 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2184 // being detached for removal. In the case of a swap, the frame needs to |
| 2181 switches::kSitePerProcess) && render_widget_) { | 2185 // remain in the tree so WebFrame::swap() can replace it with the new frame. |
| 2182 render_widget_->UnregisterRenderFrame(this); | 2186 if (is_subframe_ && type == DetachType::Remove) { |
| 2183 } | 2187 frame->parent()->removeChild(frame); |
| 2184 | |
| 2185 // Only remove the frame from the renderer's frame tree if the frame is | |
| 2186 // being detached for removal. For swaps, WebFrame::swap already takes care | |
| 2187 // of replacing the frame with a RemoteFrame. | |
| 2188 if (type == DetachType::Remove) | |
| 2189 frame->parent()->removeChild(frame); | |
| 2190 } | 2188 } |
| 2191 | 2189 |
| 2192 // |frame| is invalid after here. Be sure to clear frame_ as well, since this | 2190 // |frame| is invalid after here. Be sure to clear frame_ as well, since this |
| 2193 // object may not be deleted immediately and other methods may try to access | 2191 // object may not be deleted immediately and other methods may try to access |
| 2194 // it. | 2192 // it. |
| 2195 frame->close(); | 2193 frame->close(); |
| 2196 frame_ = nullptr; | 2194 frame_ = nullptr; |
| 2197 | 2195 |
| 2198 delete this; | 2196 delete this; |
| 2199 // Object is invalid after this point. | 2197 // Object is invalid after this point. |
| (...skipping 2821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5021 void RenderFrameImpl::RegisterMojoServices() { | 5019 void RenderFrameImpl::RegisterMojoServices() { |
| 5022 // Only main frame have ImageDownloader service. | 5020 // Only main frame have ImageDownloader service. |
| 5023 if (!frame_->parent()) { | 5021 if (!frame_->parent()) { |
| 5024 GetServiceRegistry()->AddService<image_downloader::ImageDownloader>( | 5022 GetServiceRegistry()->AddService<image_downloader::ImageDownloader>( |
| 5025 base::Bind(&ImageDownloaderImpl::CreateMojoService, | 5023 base::Bind(&ImageDownloaderImpl::CreateMojoService, |
| 5026 base::Unretained(this))); | 5024 base::Unretained(this))); |
| 5027 } | 5025 } |
| 5028 } | 5026 } |
| 5029 | 5027 |
| 5030 } // namespace content | 5028 } // namespace content |
| OLD | NEW |