Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(194)

Side by Side Diff: third_party/WebKit/Source/modules/mime_handler_view/MimeHandlerView.cpp

Issue 2719333002: second stage
Patch Set: Need to get around resource loading without web/ Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "modules/mime_handler_view/MimeHandlerView.h"
6
7 #include "Source/core/html/HTMLPlugInElement.h"
8 #include "public/platform/InterfaceProvider.h"
9 #include "public/web/WebAssociatedURLLoader.h"
10 #include "public/web/WebAssociatedURLLoaderClient.h"
11 #include "public/web/WebFrame.h"
12 #include "public/web/WebFrameClient.h"
13 #include "wtf/Functional.h"
14 #include "wtf/text/StringBuilder.h"
15
16 namespace blink {
17
18 namespace {
19 using ResourceLoaderCallback =
20 WTF::Function<void(const WebString&), WTF::SameThreadAffinity>;
21
22 class ResourceLoadClient : public WebAssociatedURLLoaderClient {
23 public:
24 ResourceLoadClient(std::unique_ptr<ResourceLoaderCallback> callback)
25 : m_callback(std::move(callback)) {}
26
27 ~ResourceLoadClient() {}
28
29 void didReceiveData(const char* data, int dataLength) {
30 m_data.append(data, dataLength);
31 }
32
33 void didFinishLoading(double finishtTime) {
34 (*m_callback)(m_data.toString());
35 delete this;
36 }
37
38 private:
39 WTF::StringBuilder m_data;
40 std::unique_ptr<ResourceLoaderCallback> m_callback;
41 };
42 }
43
44 // static
45 MimeHandlerView* MimeHandlerView::create(HTMLPlugInElement* htmlPlugInElement,
46 const WebURL& resourceUrl,
47 const WebString& mimeType,
48 int32_t elementInstanceId) {
49 // TODO: Use the right constants here.
50 if (mimeType == "application/pdf" || mimeType == "text/pdf")
51 return new MimeHandlerView(htmlPlugInElement, resourceUrl, mimeType, element InstanceId);
52 return nullptr;
53 }
54
55 MimeHandlerView::MimeHandlerView(HTMLPlugInElement* htmlPlugInElement,
56 const WebURL& resourceUrl,
57 const WebString& mimeType,
58 int32_t elementInstanceId)
59 : PluginClient(htmlPlugInElement), m_resourceUrl(resourceUrl), m_elementInst anceId(elementInstanceId) {
60 createWebUrlRequestForResource();
61 }
62
63 MimeHandlerView::~MimeHandlerView() {}
64
65 void MimeHandlerView::close() {
66 delete this;
67 }
68
69 bool MimeHandlerView::initialize() {
70 return mimeHandlerViewService();
71 }
72
73 v8::Local<v8::Object> MimeHandlerView::scriptableObject(v8::Isolate* isolate) {
74 // TODO: Implement postMessage here.
75 return PluginClient::scriptableObject(isolate);
76 }
77
78 void MimeHandlerView::createWebUrlRequestForResource() {
79 WebAssociatedURLLoaderOptions options;
80 // The embedded plugin is allowed to be cross-origin and we should always
81 // send credentials/cookies with the request.
82 options.crossOriginRequestPolicy =
83 WebAssociatedURLLoaderOptions::CrossOriginRequestPolicyAllow;
84 options.allowCredentials = true;
85 DCHECK(!m_loader);
86 m_loader.reset(WebFrame::fromFrameOwnerElement(toHTMLFrameOwnerElement(embedde rFrame()->owner()))
87 ->createAssociatedURLLoader(options));
88
89 WebURLRequest request(m_resourceUrl);
90 request.setRequestContext(WebURLRequest::RequestContextObject);
91 m_loader->loadAsynchronously(
92 request,
93 new ResourceLoadClient(WTF::bind(&MimeHandlerView::createMimeHandlerView,
94 wrapPersistent(this))));
95 }
96
97 void MimeHandlerView::createMimeHandlerView(const WebString& viewId) {
98 mimeHandlerViewService()->CreateMimeHandlerViewGuest(
99 m_elementInstanceId, viewId, m_mimeType, m_resourceUrl);
100 }
101
102 LocalFrame* MimeHandlerView::embedderFrame() {
103 return htmlPlugInElement()->document().frame();
104 }
105
106 mojom::blink::MimeHandlerViewServicePtr
107 MimeHandlerView::mimeHandlerViewService() {
108 mojom::blink::MimeHandlerViewServicePtr service;
109 embedderFrame()->interfaceProvider()->getInterface(
110 mojo::MakeRequest(&service));
111 return service;
112 }
113
114 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698